/*
* Copyright (c) 2012-2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.systemservices;
import com.emc.storageos.coordinator.client.model.SoftwareVersion;
import com.emc.storageos.coordinator.client.model.RepositoryInfo;
import com.emc.storageos.systemservices.impl.upgrade.SyncInfo;
import com.emc.storageos.systemservices.impl.upgrade.SyncInfoBuilder;
import org.junit.Assert;
import org.junit.Test;
import java.util.*;
/**
* Tests SyncInfoBuilder class
*/
public class SyncInfoTest {
private List<SoftwareVersion> arrayToList(String[] versions) throws Exception {
List<SoftwareVersion> listVersions = new ArrayList<SoftwareVersion>();
for (String version : versions) {
listVersions.add(new SoftwareVersion(version));
}
return listVersions;
}
private void verifyEqual(SyncInfo result, String toInstall, String[] toRemove) throws Exception {
Assert.assertFalse(result.isEmpty());
Assert.assertTrue("toInstall " + result.getToInstall() + " not same as expected",
(!toInstall.isEmpty()) ? (result.getToInstall().get(0).equals(new SoftwareVersion(toInstall))) :
(result.getToInstall() == null || result.getToInstall().isEmpty()));
Assert.assertTrue("toRemove not same", result.getToRemove().size() == toRemove.length);
for (String version : toRemove) {
Assert.assertTrue("toRemove not same", result.getToRemove().contains(new SoftwareVersion(version)));
}
}
private void verifyEqual(SyncInfo result, String[] toInstall, String[] toRemove) throws Exception {
Assert.assertFalse(result.isEmpty());
Assert.assertTrue("toInstall not same", result.getToInstall().size() == toInstall.length);
for (String version : toInstall) {
Assert.assertTrue("toRemove not same", result.getToInstall().contains(new SoftwareVersion(version)));
}
Assert.assertTrue("toRemove not same", result.getToRemove().size() == toRemove.length);
for (String version : toRemove) {
Assert.assertTrue("toRemove not same", result.getToRemove().contains(new SoftwareVersion(version)));
}
}
@Test
public void testLocal() throws Exception {
new TestProductName(); // NOSONAR
// ("squid:S1848 Suppress Sonar warning that created objects are never used. The constructor is called to set static fields")
// tests getLeaderSyncInfo
List<SoftwareVersion> localVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r500", "vipr-1.0.0.0.r555", "vipr-1.0.0.1.r500" });
List<SoftwareVersion> remoteVersions = arrayToList(new String[] {
"vipr-1.0.0.2.r500", "vipr-1.0.0.0.r555", "vipr-1.0.0.1.r500" });
// invalid args
RepositoryInfo localState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.1.r500"),
remoteVersions);
RepositoryInfo remoteState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.1.r500"),
remoteVersions);
Assert.assertTrue(SyncInfoBuilder.getTargetSyncInfo(localState, remoteState).isEmpty());
// test -1 - add 1, nothing to remove
remoteState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r555"),
remoteVersions);
localState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r500"),
localVersions);
SyncInfo syncInfo = SyncInfoBuilder.getTargetSyncInfo(localState, remoteState);
Assert.assertTrue(syncInfo.getToRemove().isEmpty());
Assert.assertEquals(arrayToList(new String[] { "vipr-1.0.0.2.r500" }), syncInfo.getToInstall());
// test 2 - sync 1, remove 1
localVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r500", "vipr-1.0.0.0.r555", "vipr-1.0.0.1.r500" });
remoteVersions = arrayToList(new String[] {
"vipr-1.0.0.1.r555", "vipr-1.0.0.0.r555", "vipr-1.0.0.1.r500" });
remoteState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.1.r500"),
remoteVersions);
localState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r555"),
localVersions);
verifyEqual(SyncInfoBuilder.getTargetSyncInfo(localState, remoteState), "vipr-1.0.0.1.r555",
new String[] {});
// test 3 - sync to remote current
// phase - 1
localVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r500", "vipr-1.0.0.0.r555", "vipr-1.0.0.1.r500" });
remoteVersions = arrayToList(new String[] {
"vipr-1.0.0.2.r555", "vipr-1.0.0.1.r500", "vipr-1.0.0.2.r500" });
remoteState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.2.r555"),
remoteVersions);
localState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.1.r500"),
localVersions);
verifyEqual(SyncInfoBuilder.getTargetSyncInfo(localState, remoteState), "vipr-1.0.0.2.r500",
new String[] {});
// phase 2
localVersions = arrayToList(new String[] {
"vipr-1.0.0.2.r500", "vipr-1.0.0.0.r555", "vipr-1.0.0.1.r500" });
remoteVersions = arrayToList(new String[] {
"vipr-1.0.0.2.r555", "vipr-1.0.0.1.r500", "vipr-1.0.0.2.r500" });
remoteState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.2.r555"),
remoteVersions);
localState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.1.r500"),
localVersions);
verifyEqual(SyncInfoBuilder.getTargetSyncInfo(localState, remoteState), "vipr-1.0.0.2.r555",
new String[] {});
// test 4 - complete disjoint , upgradable
// phase 1
localVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r500", "vipr-1.0.0.0.r555", "vipr-1.0.0.0.r600" });
remoteVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r700", "vipr-1.0.0.0.r750", "vipr-1.0.0.0.r800" });
remoteState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r800"),
remoteVersions);
localState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r500"),
localVersions);
verifyEqual(SyncInfoBuilder.getTargetSyncInfo(localState, remoteState), "vipr-1.0.0.0.r700",
new String[] {});
// phase 2
localVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r500", "vipr-1.0.0.0.r700", "vipr-1.0.0.0.r600" });
remoteVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r700", "vipr-1.0.0.0.r750", "vipr-1.0.0.0.r800" });
remoteState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r800"),
remoteVersions);
localState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r500"),
localVersions);
verifyEqual(SyncInfoBuilder.getTargetSyncInfo(localState, remoteState), "vipr-1.0.0.0.r750",
new String[] {});
// phase 3 - nothing to do - no-deletable
localVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r500", "vipr-1.0.0.0.r700", "vipr-1.0.0.0.r750" });
remoteVersions = arrayToList(new String[] {
"vipr-1.0.0.0.r700", "vipr-1.0.0.0.r750", "vipr-1.0.0.0.r800" });
remoteState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r800"),
remoteVersions);
localState = new RepositoryInfo(new SoftwareVersion("vipr-1.0.0.0.r500"),
localVersions);
verifyEqual(SyncInfoBuilder.getTargetSyncInfo(localState, remoteState), "vipr-1.0.0.0.r800",
new String[] {});
}
}