From d13dd0ed905109546950b4fdd1e3f9e0471ec8e7 Mon Sep 17 00:00:00 2001 From: "Kajur, Harish (vk250x)" Date: Thu, 13 Sep 2018 10:45:23 -0400 Subject: Add the dataSnapshot unit test and datagrooming to get to the 50% coverage Issue-ID: AAI-1633 Change-Id: Ic25baa59be8945cc3b07b346d44e1d35168c3b9c Signed-off-by: Kajur, Harish (vk250x) --- .../onap/aai/datagrooming/DataGroomingTest.java | 278 ++++++++++++++++ .../onap/aai/datasnapshot/DataSnapshotTest.java | 370 +++++++++++++++++++++ 2 files changed, 648 insertions(+) create mode 100644 src/test/java/org/onap/aai/datagrooming/DataGroomingTest.java create mode 100644 src/test/java/org/onap/aai/datasnapshot/DataSnapshotTest.java (limited to 'src/test/java/org') diff --git a/src/test/java/org/onap/aai/datagrooming/DataGroomingTest.java b/src/test/java/org/onap/aai/datagrooming/DataGroomingTest.java new file mode 100644 index 0000000..161702d --- /dev/null +++ b/src/test/java/org/onap/aai/datagrooming/DataGroomingTest.java @@ -0,0 +1,278 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.aai.datagrooming; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import org.janusgraph.core.JanusGraphTransaction; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Edge; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.junit.After; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; +import org.onap.aai.AAISetup; +import org.onap.aai.dbmap.AAIGraph; +import org.onap.aai.exceptions.AAIException; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.*; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class DataGroomingTest extends AAISetup { + + private static final EELFLogger logger = EELFManager.getInstance().getLogger(DataGroomingTest.class); + + private DataGrooming dataGrooming; + + private Vertex cloudRegionVertex; + + private boolean setUp = false; + + @Before + public void setup() { + dataGrooming = new DataGrooming(loaderFactory, schemaVersions); + // deleteTool.SHOULD_EXIT_VM = false; + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + cloudRegionVertex = g.addV().property("aai-node-type", "cloud-region").property("cloud-owner", "test-owner") + .property("cloud-region-id", "test-region").property("source-of-truth", "JUNIT").next(); + + Vertex cloudRegionVertexDupe = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-owner").property("cloud-region-id", "test-region") + .property("source-of-truth", "JUNIT").next(); + + Vertex cloudRegionDupe3 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-owner").property("cloud-region-id", "test-region") + .property("source-of-truth", "JUNIT").next(); + + Vertex cloudRegionDupe4 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-owner").property("cloud-region-id", "test-region") + .property("source-of-truth", "JUNIT").next(); + + Vertex cloudRegionDupe5 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-owner").property("cloud-region-id", "test-region") + .property("source-of-truth", "JUNIT").next(); + + Vertex cloudRegionVertexBadNode = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-owner-noregionId").property("source-of-truth", "JUNIT").next(); + + + Vertex cloudRegionVertexBadNode2 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-region", "test-owner-noownerId").property("source-of-truth", "JUNIT").next(); + + Vertex cloudRegionVertexBadNode3 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-region", "test-owner-noownerId2").property("source-of-truth", "JUNIT").next(); + + Vertex tenantGhostNodeNoNT = g.addV().property("tenant-id", "test-owner-tenant-id-1") + .property("source-of-truth", "JUNIT").next(); + + Vertex cloudRegionNoNT = g.addV().property("cloud-region", "test-owner-noownerIdnont-1") + .property("cloud-owner", "test-owner-noregion-nont2").property("source-of-truth", "JUNIT").next(); + + Vertex tenantNoNT = g.addV().property("tenant-id", "test-owner-tenant-id-1") + .property("source-of-truth", "JUNIT").next(); + + Vertex tenantNoKey = g.addV().property("aai-node-type", "tenant").property("source-of-truth", "JUNIT") + .next(); + + Vertex cloudRegionNoKey = g.addV().property("aai-node-type", "cloud-region") + .property("source-of-truth", "JUNIT").next(); + + Vertex tenantNoParent = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-owner-tenant-id").property("source-of-truth", "JUNIT").next(); + + Vertex tenantNoParent1 = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-owner-tenant-id1").property("source-of-truth", "JUNIT").next(); + + Vertex tenantNoParentDupe1 = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-owner-tenant-id1").property("source-of-truth", "JUNIT").next(); + + Vertex tenantNoParentDupe2 = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-owner-tenant-id1").property("source-of-truth", "JUNIT").next(); + + Vertex tenantDupe3 = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-owner-tenant-id1").property("source-of-truth", "JUNIT").next(); + Vertex tenantDupe4 = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-owner-tenant-id1").property("source-of-truth", "JUNIT").next(); + + Vertex tenantNoParent2 = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-owner-tenant-id2").property("source-of-truth", "JUNIT").next(); + + tenantNoParent2.property("aai-uuid", tenantNoParent2.id() + "dummy"); + + Vertex tenantVertex = g.addV().property("aai-node-type", "tenant").property("tenant-id", "test-tenant") + .property("source-of-truth", "JUNIT").next(); + + Vertex pserverVertex = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver") + .property("in-maint", false).property("source-of-truth", "JUNIT").next(); + + Vertex azNokey = g.addV().property("aai-node-type", "availability-zone") + .property("source-of-truth", "JUNIT").next(); + + cloudRegionVertex.addEdge("BadEdge", tenantGhostNodeNoNT, null); + edgeSerializer.addTreeEdge(g, cloudRegionVertex, tenantVertex); + edgeSerializer.addTreeEdge(g, cloudRegionVertex, tenantDupe3); + edgeSerializer.addTreeEdge(g, cloudRegionVertex, tenantDupe4); + edgeSerializer.addTreeEdge(g, cloudRegionNoKey, tenantNoKey); + edgeSerializer.addEdge(g, pserverVertex, azNokey); + + cloudRegionNoNT.addEdge("Base Edge2", tenantNoNT, null); + + } catch (Exception ex) { + success = false; + logger.error("Unable to create the vertexes", ex); + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + @Test + public void testGroomingNonAutoFix() throws AAIException { + String[] args = { + "-edgesOnly", "false", "-autoFix ", "false", "-skipHostCheck ", "true", "-dontFixOrphans ", "true" + }; + + dataGrooming.execute(args); + /* + * 2 GhostNodes - CloudRegions 1 OrphaNode - tenant + */ + assertThat(dataGrooming.getGhostNodeCount(), is(5)); + assertThat(dataGrooming.getOrphanNodeCount(), is(5)); + assertThat(dataGrooming.getMissingAaiNtNodeCount(), is(1)); + assertThat(dataGrooming.getOneArmedEdgeHashCount(), is(3)); + } + + @Test + public void testGroomingWithAutoFix() throws AAIException { + String[] args = { + "-autoFix ", "true", "-edgesOnly", "false", "-skipHostCheck ", "false", "-dontFixOrphans ", "false", + "-skipIndexUpdateFix", "true", "-sleepMinutes", "1", "-timeWindowMinutes", "100", "-dupeFixOn", "true" + }; + + dataGrooming.execute(args); + assertThat(dataGrooming.getDeleteCandidateList().size(), is(19)); + assertThat(dataGrooming.getDeleteCount(), is(18)); + } + + @Test + public void testGroomingUpdateIndexedProps() throws AAIException { + + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + GraphTraversalSource g = transaction.traversal(); + Vertex cloudRegionVertex1 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-owner-partial").property("cloud-region-id", "test-region") + .property("source-of-truth", "JUNIT").next(); + dataGrooming.updateIndexedProps(cloudRegionVertex1, "1", "cloud-region", new HashMap<>(), new ArrayList<>()); + transaction.rollback(); + // TODO asset something + } + + @Test + public void testGroomingGettersAndSetters() throws AAIException { + + dataGrooming.setGhostNodeHash(new HashMap<>()); + dataGrooming.setOrphanNodeHash(new HashMap<>()); + dataGrooming.setMissingAaiNtNodeHash(new HashMap<>()); + dataGrooming.setOneArmedEdgeHash(new HashMap<>()); + dataGrooming.setDeleteCandidateList(new HashSet<>()); + dataGrooming.setDeleteCount(0); + + assertThat(dataGrooming.getGhostNodeCount(), is(0)); + assertThat(dataGrooming.getOrphanNodeCount(), is(0)); + assertThat(dataGrooming.getMissingAaiNtNodeCount(), is(0)); + assertThat(dataGrooming.getOneArmedEdgeHashCount(), is(0)); + assertThat(dataGrooming.getDeleteCandidateList().size(), is(0)); + assertThat(dataGrooming.getDeleteCount(), is(0)); + } + + @Test + public void testGroomingNoArgs() throws AAIException { + String[] args = { + + }; + dataGrooming.execute(args); + assertThat(dataGrooming.getGhostNodeCount(), is(5)); + assertThat(dataGrooming.getOrphanNodeCount(), is(5)); + assertThat(dataGrooming.getMissingAaiNtNodeCount(), is(1)); + assertThat(dataGrooming.getOneArmedEdgeHashCount(), is(3)); + assertThat(dataGrooming.getDeleteCandidateList().size(), is(0)); + assertThat(dataGrooming.getDeleteCount(), is(0)); + } + + @Test + public void testGroomingDupeCheck() throws AAIException { + String[] args = { + }; + + dataGrooming.execute(args); + assertThat(dataGrooming.getDupeGroups().size(), is(2)); + } + + @Test + public void testGroomingAutoFixMaxRecords() throws AAIException { + + String[] args = { "-autoFix ", "true", "-maxFix", "0", "-edgesOnly", + "true" , "-sleepMinutes", "1"}; + dataGrooming.execute(args); + assertThat(dataGrooming.getDeleteCandidateList().size(), is(0)); + + } + + @After + public void tearDown() { + + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + g.V().has("source-of-truth", "JUNIT").toList().forEach(v -> v.remove()); + + } catch (Exception ex) { + success = false; + logger.error("Unable to remove the vertexes", ex); + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to teardown the graph"); + } + } + } +} \ No newline at end of file diff --git a/src/test/java/org/onap/aai/datasnapshot/DataSnapshotTest.java b/src/test/java/org/onap/aai/datasnapshot/DataSnapshotTest.java new file mode 100644 index 0000000..35e8aa2 --- /dev/null +++ b/src/test/java/org/onap/aai/datasnapshot/DataSnapshotTest.java @@ -0,0 +1,370 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.aai.datasnapshot; + +import org.apache.commons.io.FileUtils; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.janusgraph.core.JanusGraph; +import org.janusgraph.core.JanusGraphTransaction; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.dbmap.AAIGraph; +import org.springframework.boot.test.rule.OutputCapture; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.containsString; +import static org.junit.Assert.assertThat; + +public class DataSnapshotTest extends AAISetup { + + private GraphTraversalSource g; + + private JanusGraphTransaction currentTransaction; + + private List vertexes; + + @Rule + public OutputCapture outputCapture = new OutputCapture(); + + @Before + public void setup(){ + JanusGraph graph = AAIGraph.getInstance().getGraph(); + currentTransaction = graph.newTransaction(); + g = currentTransaction.traversal(); + + // Setup the graph so it has one pserver vertex + vertexes = setupPserverData(g); + currentTransaction.commit(); + } + + @After + public void tearDown(){ + + JanusGraph graph = AAIGraph.getInstance().getGraph(); + currentTransaction = graph.newTransaction(); + g = currentTransaction.traversal(); + + vertexes.stream().forEach((v) -> g.V(v).next().remove()); + currentTransaction.commit(); + } + + @Test + public void testClearEntireDatabaseAndVerifyDataIsRemoved() throws IOException { + + // Copy the pserver.graphson file from src/test/resoures to ${AJSC_HOME}/logs/data/dataSnapshots/ folder + String sourceFileName = "src/test/resources/pserver.graphson"; + String destFileName = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/pserver.graphson"; + copySnapshotFile(sourceFileName,destFileName); + + + // Run the dataSnapshot to clear the graph + String [] args = {"CLEAR_ENTIRE_DATABASE", "pserver.graphson"}; + DataSnapshot.main(args); + + // Since the code doesn't clear the graph using AAIGraph.getInstance().getGraph(), its creating a second inmemory graph + // so we can't verify this with by counting the vertexes and edges in the graph + // In the future we could do that but for now we will depend on the following string "All done clearing DB" + + // Capture the standard output and see if the following text is there + assertThat(outputCapture.toString(), containsString("All done clearing DB")); + } + + + @Test + public void testClearEntireDatabaseWithEmptyGraphSONFileAndItShouldNotClearDatabase() throws IOException { + + // Create a empty file called empty.graphson in src/test/resources/ + + // Copy that file to ${AJSC_HOME}/logs/data/dataSnapshots/ + String sourceFileName = "src/test/resources/empty.graphson"; + String destFileName = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/empty.graphson"; + copySnapshotFile(sourceFileName,destFileName); + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"CLEAR_ENTIRE_DATABASE", "empty.graphson"}; + DataSnapshot.main(args); + + // Capture the standard output and see if the following text had no data is there + // Since the graphson is empty it should output that and not clear the graph + // Uncomment the following line after the test changes are done + assertThat(outputCapture.toString(), containsString("graphson had no data.")); + } + + @Test + public void testTakeSnapshotAndItShouldCreateASnapshotFileWithOneVertex() throws IOException, InterruptedException { + + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + Set preSnapshotFiles = Files.walk(Paths.get(logsFolder)).collect(Collectors.toSet()); + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"JUST_TAKE_SNAPSHOT"}; + + DataSnapshot.main(args); + + // Add sleep so the file actually gets created with the data + + Set postSnapshotFiles = Files.walk(Paths.get(logsFolder)).collect(Collectors.toSet()); + + assertThat(postSnapshotFiles.size(), is(preSnapshotFiles.size()+1)); + postSnapshotFiles.removeAll(preSnapshotFiles); + List snapshotPathList = postSnapshotFiles.stream().collect(Collectors.toList()); + + assertThat(snapshotPathList.size(), is(1)); + + List fileContents = Files.readAllLines(snapshotPathList.get(0)); + assertThat(fileContents.get(0), containsString("id")); + } + + @Test + public void testTakeSnapshotMultiAndItShouldCreateMultipleSnapshotFiles() throws IOException { + + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "2"}; + + DataSnapshot.main(args); + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + } + + @Test + public void testTakeSnapshotMultiWithDebugAndItShouldCreateMultipleSnapshotFiles() throws IOException { + + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "2", "DEBUG"}; + + DataSnapshot.main(args); + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + } + + + @Test + public void testTakeSnapshotMultiWithDebugAndInvalidNumberAndItShouldFail() throws IOException { + + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "foo", "DEBUG"}; + + DataSnapshot.main(args); + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + } + + @Test + public void testTakeSnapshotMultiWithDebugAndTimeDelayAndInvalidNumberAndItShouldFail() throws IOException { + + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "foo", "DEBUG", "100"}; + + DataSnapshot.main(args); + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + } + + @Test + public void testTakeSnapshotMultiWithDebugAndTimeDelayAndZeroThreadsAndItShouldFail() throws IOException { + + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "0", "DEBUG", "100"}; + + DataSnapshot.main(args); + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + } + + @Test + public void testTakeSnapshotMultiWithDebugAndTimeDelayIsInvalidNumberAndItShouldFail() throws IOException { + + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "0", "DEBUG", "foo"}; + + DataSnapshot.main(args); + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + } + + @Test + public void testTakeSnapshotMultiWithMoreParametersThanAllowedAndItShouldFail() throws IOException { + + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "0", "DEBUG", "foo", "bar"}; + + DataSnapshot.main(args); + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + } + + @Test + public void testTakeSnapshotMultiWithZeroThreadsAndItShouldFail(){ + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "0"}; + + DataSnapshot.main(args); + } + + @Test + public void testTakeSnapshotMultiWithInvalidNumberForThreadsAndItShouldFail(){ + + // For this test if there is only one vertex in the graph, not sure if it will create multiple files + // would need to add more data to the janusgraph + String logsFolder = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/"; + + // Run the clear dataSnapshot and this time it should fail + String [] args = {"THREADED_SNAPSHOT", "foo"}; + + DataSnapshot.main(args); + } + + @Test + public void testReloadDataAndVerifyDataInGraphMatchesGraphson() throws IOException { + + // Create a graphson file that contains a couple of vertexes in src/test/resources + // Copy that file to ${AJSC_HOME}/logs/data/dataSnasphots/ + // Run the reload arguments and ensure that the graph was recreated by checking vertexes in graph + + // After reload remove the added vertexes in the graph + // The reason for this so each test is independent + // as there shouldn't be dependencies and cause weird issues + String sourceFileName = "src/test/resources/pserver.graphson"; + String destFileName = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/pserver.graphson"; + copySnapshotFile(sourceFileName,destFileName); + + String [] args = {"RELOAD_DATA", "pserver.graphson"}; + + DataSnapshot.main(args); + } + + @Test + public void testMultiReloadDataAndVerifyDataInGraphMatchesGraphson() throws IOException { + + // Create multiple graphson files that contains a couple of vertexes in src/test/resources + // Copy those files to ${AJSC_HOME}/logs/data/dataSnasphots/ + // Run the reload arguments and ensure that the graph was recreated by checking vertexes in graph + String sourceFileName = "src/test/resources/pserver2.graphson.P0"; + String destFileName = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/pserver2.graphson.P0"; + copySnapshotFile(sourceFileName,destFileName); + + sourceFileName = "src/test/resources/pserver2.graphson.P1"; + destFileName = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/pserver2.graphson.P1"; + copySnapshotFile(sourceFileName,destFileName); + + // After reload remove the added vertexes in the graph + // The reason for this so each test is independent + // as there shouldn't be dependencies and cause weird issues + String [] args = {"MULTITHREAD_RELOAD", "pserver2.graphson"}; + + DataSnapshot.main(args); + } + + @Test + public void testMultiReloadDataWithNonExistentFilesAndItShouldFail() throws IOException { + + // After reload remove the added vertexes in the graph + // The reason for this so each test is independent + // as there shouldn't be dependencies and cause weird issues + String [] args = {"MULTITHREAD_RELOAD", "emptyfoo2.graphson"}; + + DataSnapshot.main(args); + } + + @Test + public void testReloadMultiDataAndVerifyDataInGraphMatchesGraphson() throws IOException { + + // Create multiple graphson files that contains a couple of vertexes in src/test/resources + // Copy those files to ${AJSC_HOME}/logs/data/dataSnasphots/ + // Run the reload arguments and ensure that the graph was recreated by checking vertexes in graph + String sourceFileName = "src/test/resources/pserver2.graphson.P0"; + String destFileName = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/pserver2.graphson.P0"; + copySnapshotFile(sourceFileName,destFileName); + + sourceFileName = "src/test/resources/pserver2.graphson.P1"; + destFileName = System.getProperty("AJSC_HOME") + "/logs/data/dataSnapshots/pserver2.graphson.P1"; + copySnapshotFile(sourceFileName,destFileName); + + // After reload remove the added vertexes in the graph + // The reason for this so each test is independent + // as there shouldn't be dependencies and cause weird issues + String [] args = {"RELOAD_DATA_MULTI", "pserver2.graphson"}; + + DataSnapshot.main(args); + } + + private List setupPserverData(GraphTraversalSource g){ + Vertex v1 = g.addV().property("aai-node-type", "pserver") + .property("hostname", "somerandomhostname") + .next(); + List list = new ArrayList<>(); + list.add(v1); + Vertex v2 = g.addV().property("aai-node-type", "pserver") + .property("hostname", "somerandomhostname2") + .next(); + list.add(v2); + return list; + } + + private void copySnapshotFile(String sourceFileName, String destFileName) throws IOException { + + File inputFile = new File(sourceFileName); + File outputFile = new File(destFileName); + + FileUtils.copyFile(inputFile, outputFile); + } +} \ No newline at end of file -- cgit 1.2.3-korg