com.microsoftopentechnologies.windowsazurestorage.helper.CredentialMigrationTest.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoftopentechnologies.windowsazurestorage.helper.CredentialMigrationTest.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.microsoftopentechnologies.windowsazurestorage.helper;

import com.cloudbees.plugins.credentials.CredentialsMatchers;
import com.cloudbees.plugins.credentials.CredentialsProvider;
import com.cloudbees.plugins.credentials.CredentialsStore;
import com.cloudbees.plugins.credentials.domains.Domain;
import com.cloudbees.plugins.credentials.domains.DomainRequirement;
import com.microsoftopentechnologies.windowsazurestorage.beans.StorageAccountInfo;
import hudson.security.ACL;
import jenkins.model.Jenkins;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.jvnet.hudson.test.JenkinsRule;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static org.junit.Assert.assertEquals;

/**
 *
 * @author arroyc
 */
public class CredentialMigrationTest {

    public static File input = new File(
            "src/test/resources/com/microsoftopentechnologies/helper/correctFormatOldConfig.xml");
    private Jenkins jenkinsInstance;
    private static final String correctConfigContent = "<?xml version='1.0' encoding='UTF-8'?>\n"
            + "<com.microsoftopentechnologies.windowsazurestorage.AzureStoragePublisher_-WAStorageDescriptor plugin='windows-azure-storage@0.3.3-SNAPSHOT'>\n"
            + "<storageAccounts>\n"
            + "<com.microsoftopentechnologies.windowsazurestorage.beans.StorageAccountInfo>\n"
            + "<storageAccName>abcdef</storageAccName>\n" + "<storageAccountKey>12345</storageAccountKey>\n"
            + "<blobEndPointURL>http://test1/</blobEndPointURL>\n"
            + "</com.microsoftopentechnologies.windowsazurestorage.beans.StorageAccountInfo>\n"
            + "<com.microsoftopentechnologies.windowsazurestorage.beans.StorageAccountInfo>\n"
            + "<storageAccName>12345</storageAccName>\n" + "<storageAccountKey>abcdef</storageAccountKey>\n"
            + "<blobEndPointURL>http://test2/</blobEndPointURL>\n"
            + "</com.microsoftopentechnologies.windowsazurestorage.beans.StorageAccountInfo>\n"
            + "</storageAccounts>\n"
            + "</com.microsoftopentechnologies.windowsazurestorage.AzureStoragePublisher_-WAStorageDescriptor>";

    private static final String wrongConfigContent = "<?xml version='1.0' encoding='UTF-8'?>\n"
            + "<com.microsoftopentechnologies.windowsazurestorage.AzureStoragePublisher_-WAStorageDescriptor plugin='windows-azure-storage@0.3.3-SNAPSHOT'>\n"
            + "<storageAccounts>\n" + "<storageAccName>abcdef</storageAccName>\n"
            + "<storageAccountKey>12345</storageAccountKey>\n"
            + "<blobEndPointURL>http://blob.core.windows.net/</blobEndPointURL>\n" + "</storageAccounts>\n"
            + "</com.microsoftopentechnologies.windowsazurestorage.AzureStoragePublisher_-WAStorageDescriptor>";

    @Rule
    public TemporaryFolder testFolder = new TemporaryFolder();
    @ClassRule
    public static JenkinsRule j = new JenkinsRule();

    @Before
    public void setUp() {
        jenkinsInstance = Jenkins.getInstance();

    }

    /**
     * Test of upgradeStorageConfig method, of class CredentialMigration.
     */
    @Test
    public void testUpgradeStorageConfig() throws Exception {
        System.out.println("upgradeStorageConfig");

        String storageAccount = "abcdef";
        String storageAccountKey = "12345";
        String storageBlobURL = "http://test1/";
        File configFile = testFolder.newFile(Constants.LEGACY_STORAGE_CONFIG_FILE);
        FileUtils.writeStringToFile(configFile, correctConfigContent);
        FileUtils.copyFileToDirectory(configFile, jenkinsInstance.root);

        CredentialMigration.upgradeStorageConfig();

        CredentialsStore s = CredentialsProvider.lookupStores(jenkinsInstance).iterator().next();

        assertEquals(2, s.getCredentials(Domain.global()).size());

        AzureCredentials.StorageAccountCredential u = new AzureCredentials.StorageAccountCredential(storageAccount,
                storageAccountKey, storageBlobURL);
        AzureCredentials storageCred = CredentialsMatchers.firstOrNull(
                CredentialsProvider.lookupCredentials(AzureCredentials.class, jenkinsInstance, ACL.SYSTEM,
                        Collections.<DomainRequirement>emptyList()),
                CredentialsMatchers.withId(u.getId()));

        assertEquals(u.getStorageAccountName(), storageCred.getStorageAccountName());
        assertEquals(u.getEndpointURL(), storageCred.getBlobEndpointURL());
        assertEquals(u.getSecureKey().getEncryptedValue(), storageCred.getStorageKey());

    }

    /**
     * Test of getOldStorageConfig method, of class CredentialMigration.
     */
    @Test
    public void testGetOldStorageConfig() throws Exception {
        System.out.println("getOldStorageConfig");

        List<StorageAccountInfo> expResult = new ArrayList<StorageAccountInfo>();
        expResult.add(new StorageAccountInfo("abcdef", "12345", "http://test1/"));
        expResult.add(new StorageAccountInfo("12345", "abcdef", "http://test2/"));

        File configFile = testFolder.newFile("test.xml");
        FileUtils.writeStringToFile(configFile, correctConfigContent);
        List<StorageAccountInfo> result = CredentialMigration.getOldStorageConfig(configFile);

        assertEquals(expResult.size(), result.size());
        assertEquals(expResult.get(0).getStorageAccName(), result.get(0).getStorageAccName());
        assertEquals(expResult.get(0).getBlobEndPointURL(), result.get(0).getBlobEndPointURL());
        assertEquals(expResult.get(0).getStorageAccountKey(), result.get(0).getStorageAccountKey());

        assertEquals(expResult.get(1).getStorageAccName(), result.get(1).getStorageAccName());
        assertEquals(expResult.get(1).getBlobEndPointURL(), result.get(1).getBlobEndPointURL());
        assertEquals(expResult.get(1).getStorageAccountKey(), result.get(1).getStorageAccountKey());

        expResult.clear();
        result.clear();

        configFile = testFolder.newFile("wrong.xml");
        FileUtils.writeStringToFile(configFile, wrongConfigContent);
        result = CredentialMigration.getOldStorageConfig(configFile);

        assertEquals(0, result.size());
    }

}