/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.common; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.emc.storageos.db.common.DbMigrationCallbackChecker.MigrationCallbackDiff; public class DbMigrationCallbackCheckerTest { private Map<String, List<String>> baselineVersionedCallbacks; private Map<String, List<String>> curentVersionedCallbacks; private static final String version1_0Callback1 = "MigrationCallback1.0.1"; private static final String version1_0Callback2 = "MigrationCallback1.0.2"; private static final String version1_0Callback3 = "MigrationCallback1.0.3"; private static final String version2_0Callback1 = "MigrationCallback2.0.1"; private static final String version2_0Callback2 = "MigrationCallback2.0.2"; private static final String version2_0Callback3 = "MigrationCallback2.0.3"; private static final String version1_0 = "1.0"; private static final String version2_0 = "2.0"; @Before public void setup() { this.baselineVersionedCallbacks = new HashMap<String, List<String>>(); List<String> version1_0Callbacks = new ArrayList<String>(); version1_0Callbacks.add(version1_0Callback1); version1_0Callbacks.add(version1_0Callback2); version1_0Callbacks.add(version1_0Callback3); List<String> version2_0Callbacks = new ArrayList<String>(); version2_0Callbacks.add(version2_0Callback1); version2_0Callbacks.add(version2_0Callback2); this.baselineVersionedCallbacks.put(version1_0, version1_0Callbacks); this.baselineVersionedCallbacks.put(version2_0, version2_0Callbacks); this.curentVersionedCallbacks = deepCloneVersionedCallbacks(this.baselineVersionedCallbacks); } @Test public void shouldNoDiffWithSameBaselineAndCurrentCallbacks() { DbMigrationCallbackChecker callbackChecker = new DbMigrationCallbackChecker(this.baselineVersionedCallbacks, this.curentVersionedCallbacks); Assert.assertFalse(callbackChecker.hasDiff()); } @Test public void shouldNoDiffWithDifferentCallbackOrder() { Map<String, List<String>> current = deepCloneVersionedCallbacks(this.curentVersionedCallbacks); current.get(version1_0).remove(version1_0Callback1); current.get(version1_0).add(version1_0Callback1); DbMigrationCallbackChecker callbackChecker = new DbMigrationCallbackChecker(this.baselineVersionedCallbacks, current); Assert.assertFalse(callbackChecker.hasDiff()); } @Test public void shouldHasDiffWithCurrentAddNewCallbacks() { String newCallback = version2_0Callback3; Map<String, List<String>> current = deepCloneVersionedCallbacks(this.curentVersionedCallbacks); current.get(version2_0).add(newCallback); DbMigrationCallbackChecker callbackChecker = new DbMigrationCallbackChecker(this.baselineVersionedCallbacks, current); Assert.assertTrue(callbackChecker.hasDiff()); Map<String, List<MigrationCallbackDiff>> versionedDiffs = callbackChecker.getDiff(); Assert.assertTrue(versionedDiffs.containsKey(version2_0)); List<MigrationCallbackDiff> diffs = versionedDiffs.get(version2_0); Assert.assertEquals(1, diffs.size()); Assert.assertEquals("add", diffs.get(0).getAction()); Assert.assertEquals(newCallback, diffs.get(0).getCallback()); } @Test public void shouldHasDiffWithCurrentRemoveNewCallbacks() { String newCallback = version2_0Callback2; Map<String, List<String>> current = deepCloneVersionedCallbacks(this.curentVersionedCallbacks); current.get(version2_0).remove(newCallback); DbMigrationCallbackChecker callbackChecker = new DbMigrationCallbackChecker(this.baselineVersionedCallbacks, current); Assert.assertTrue(callbackChecker.hasDiff()); Map<String, List<MigrationCallbackDiff>> versionedDiffs = callbackChecker.getDiff(); Assert.assertTrue(versionedDiffs.containsKey(version2_0)); List<MigrationCallbackDiff> diffs = versionedDiffs.get(version2_0); Assert.assertEquals(1, diffs.size()); Assert.assertEquals("remove", diffs.get(0).getAction()); Assert.assertEquals(newCallback, diffs.get(0).getCallback()); } private Map<String, List<String>> deepCloneVersionedCallbacks(final Map<String, List<String>> versionedCallbacks) { Map<String, List<String>> newVersionedCallbacks = new HashMap<String, List<String>>(); for (Map.Entry<String, List<String>> callbackEntry : versionedCallbacks.entrySet()) { List<String> cs = new ArrayList<String>(); for (String callback : callbackEntry.getValue()) { cs.add(callback); } newVersionedCallbacks.put(callbackEntry.getKey(), cs); } return newVersionedCallbacks; } }