예제 #1
0
        public async Task TestFetchingDocumentUnderneathAPathAndSavingDocuments()
        {
            var testName      = nameof(TestFetchingDocumentUnderneathAPathAndSavingDocuments);
            var testInputPath = TestHelper.GetInputFolderPath(testsSubpath, testName);

            CdmCorpusDefinition corpus = new CdmCorpusDefinition();

            corpus.SetEventCallback(new EventCallback {
                Invoke = CommonDataModelLoader.ConsoleStatusReport
            }, CdmStatusLevel.Warning);
            LocalAdapter localAdapter = new LocalAdapter(testInputPath);

            corpus.Storage.Mount("local", localAdapter);
            corpus.Storage.DefaultNamespace = "local";
            corpus.Storage.Unmount("cdm");

            var manifestFromModelJson = await corpus.FetchObjectAsync <CdmManifestDefinition>("sub-folder/model.json");

            // Swap out the adapter for a fake one so that we aren't actually saving files.
            ConcurrentDictionary <string, string> allDocs = new ConcurrentDictionary <string, string>();
            var testAdapter = new TestStorageAdapter(allDocs);

            corpus.Storage.SetAdapter("local", testAdapter);

            var newManifestFromModelJsonName = "model.json";
            await manifestFromModelJson.SaveAsAsync(newManifestFromModelJsonName, true);

            // Verify that model.json persistence was called by comparing the saved document to the original model.json.
            var serializedManifest     = allDocs[$"/sub-folder/{newManifestFromModelJsonName}"];
            var expectedOutputManifest = TestHelper.GetExpectedOutputFileContent(testsSubpath, testName, manifestFromModelJson.Name);

            TestHelper.AssertSameObjectWasSerialized(expectedOutputManifest, serializedManifest);
        }
예제 #2
0
        public async Task TestSymsSavingAndFetchingDocument()
        {
            SymsTestHelper.CheckSymsEnvironment();
            var symsAdapter = SymsTestHelper.CreateAdapterWithClientId();
            await SymsTestHelper.CleanDatabase(symsAdapter, SymsTestHelper.DatabaseName);

            var testInputPath     = TestHelper.GetInputFolderPath(testsSubpath, nameof(TestSymsSavingAndFetchingDocument));
            var testActOutputPath = TestHelper.GetActualOutputFolderPath(testsSubpath, nameof(TestSymsSavingAndFetchingDocument));
            var testExpOutputPath = TestHelper.GetExpectedOutputFolderPath(testsSubpath, nameof(TestSymsSavingAndFetchingDocument));

            CdmCorpusDefinition corpus = new CdmCorpusDefinition();

            corpus.SetEventCallback(new EventCallback {
                Invoke = CommonDataModelLoader.ConsoleStatusReport
            }, CdmStatusLevel.Warning);

            var adlsAdapter1 = SymsTestHelper.CreateADLSAdapterWithClientIdWithSharedKey(1);
            var adlsAdapter2 = SymsTestHelper.CreateADLSAdapterWithClientIdWithSharedKey(2);

            var localInputAdapter     = new LocalAdapter(testInputPath);
            var localActOutputAdapter = new LocalAdapter(testActOutputPath);
            var localExpOutputAdapter = new LocalAdapter(testExpOutputPath);

            corpus.Storage.Mount("adls1", adlsAdapter1);
            corpus.Storage.Mount("adls2", adlsAdapter2);
            corpus.Storage.Mount("syms", symsAdapter);
            corpus.Storage.Mount("localInput", localInputAdapter);
            corpus.Storage.Mount("localActOutput", localActOutputAdapter);
            corpus.Storage.Mount("localExpOutput", localExpOutputAdapter);

            corpus.Storage.Unmount("cdm");
            corpus.Storage.DefaultNamespace = "localInput";

            var manifest = await corpus.FetchObjectAsync <CdmManifestDefinition>("default.manifest.cdm.json");

            manifest.ManifestName = SymsTestHelper.DatabaseName;
            await TestSymsSaveManifest(manifest);
            await TestSymsFetchManifest(corpus, manifest, "default.manifest.cdm.json");
            await TestSymsFetchDocument(corpus, manifest);

            var manifestModified = await corpus.FetchObjectAsync <CdmManifestDefinition>("defaultmodified.manifest.cdm.json");

            manifestModified.ManifestName = SymsTestHelper.DatabaseName;
            manifestModified.Entities[0].LastFileModifiedTime = DateTimeOffset.UtcNow;
            await TestSymsSaveManifest(manifestModified);
            await TestSymsFetchManifest(corpus, manifestModified, "defaultmodified.manifest.cdm.json");
            await TestSymsFetchDocument(corpus, manifestModified);

            var tasks = new List <Func <Task> >
            {
                TestSymsSmartADLSAdapterMountLogic,
                TestSymsSmartADLSAdapterMountLogic,
                TestSymsSmartADLSAdapterMountLogic,
                TestSymsSmartADLSAdapterMountLogic
            };
            await Task.WhenAll(tasks.AsParallel().Select(async task => await task()));

            await SymsTestHelper.CleanDatabase(symsAdapter, SymsTestHelper.DatabaseName);
        }
예제 #3
0
        public void TestCreateAdapterPath()
        {
            var    adapter = new LocalAdapter("C:/some/dir");
            string pathWithLeadingSlash    = adapter.CreateAdapterPath("/folder");
            string pathWithoutLeadingSlash = adapter.CreateAdapterPath("folder");

            Assert.AreEqual(pathWithLeadingSlash, "C:\\some\\dir\\folder");
            Assert.AreEqual(pathWithLeadingSlash, pathWithoutLeadingSlash);
        }
예제 #4
0
        public async Task TestFetchingAndSavingDocumentsWithCaseInsensitiveCheck()
        {
            var testName      = "TestFetchingAndSavingDocumentsWithCaseInsensitiveCheck";
            var testInputPath = TestHelper.GetInputFolderPath(testsSubpath, testName);

            CdmCorpusDefinition corpus = new CdmCorpusDefinition();

            corpus.SetEventCallback(new EventCallback {
                Invoke = CommonDataModelLoader.ConsoleStatusReport
            }, CdmStatusLevel.Warning);
            LocalAdapter localAdapter = new LocalAdapter(testInputPath);

            corpus.Storage.Mount("local", localAdapter);
            corpus.Storage.DefaultNamespace = "local";
            corpus.Storage.Unmount("cdm");


            var manifest = await corpus.FetchObjectAsync <CdmManifestDefinition>("empty.Manifest.cdm.json");

            var manifestFromModelJson = await corpus.FetchObjectAsync <CdmManifestDefinition>("Model.json");

            var manifestFromOdi = await corpus.FetchObjectAsync <CdmManifestDefinition>("Odi.json");

            // Swap out the adapter for a fake one so that we aren't actually saving files.
            Dictionary <string, string> allDocs = new Dictionary <string, string>();
            var testAdapter = new TestStorageAdapter(allDocs);

            corpus.Storage.SetAdapter("local", testAdapter);

            var newManifestName = "empty.MANIFEST.CDM.json";
            await manifest.SaveAsAsync(newManifestName, true);

            // Verify that manifest persistence was called by comparing the saved document to the original manifest.
            var serializedManifest     = allDocs[$"/{newManifestName}"];
            var expectedOutputManifest = TestHelper.GetExpectedOutputFileContent(testsSubpath, testName, manifest.Name);

            TestHelper.AssertSameObjectWasSerialized(expectedOutputManifest, serializedManifest);

            var newManifestFromModelJsonName = "MODEL.json";
            await manifestFromModelJson.SaveAsAsync(newManifestFromModelJsonName, true);

            // Verify that model.json persistence was called by comparing the saved document to the original model.json.
            serializedManifest     = allDocs[$"/{newManifestFromModelJsonName}"];
            expectedOutputManifest = TestHelper.GetExpectedOutputFileContent(testsSubpath, testName, manifestFromModelJson.Name);
            TestHelper.AssertSameObjectWasSerialized(expectedOutputManifest, serializedManifest);

            var newManifestFromOdiName = "ODI.json";
            await manifestFromOdi.SaveAsAsync(newManifestFromOdiName, true);

            // Verify that ODI persistence was called by comparing the saved document to the original ODI document.
            serializedManifest     = allDocs[$"/{newManifestFromOdiName}"];
            expectedOutputManifest = TestHelper.GetExpectedOutputFileContent(testsSubpath, testName, manifestFromOdi.Name);
            TestHelper.AssertSameObjectWasSerialized(expectedOutputManifest, serializedManifest);
            // TODO: We need to check the odi.json for linked documents too, will add it when Bug 232672 is fixed
        }
예제 #5
0
        public void TestCreateAdapterPath()
        {
            var    adapter = new LocalAdapter("C:/some/dir");
            string pathWithLeadingSlash    = adapter.CreateAdapterPath("/folder");
            string pathWithoutLeadingSlash = adapter.CreateAdapterPath("folder");

            Assert.AreEqual(pathWithLeadingSlash, "C:\\some\\dir\\folder");
            Assert.AreEqual(pathWithLeadingSlash, pathWithoutLeadingSlash);

            // A null corpus path should return a null adapter path
            Assert.IsNull(adapter.CreateAdapterPath(null));
        }
        static void ConfigureLocalAdapter()
        {
            string root = GetParameterValueFromUser("root path", "LocalAdapter", "../../../../../../example-public-standards" /* this is just to show what the value should look like. */);

            // Create a local adapter with the parameter values given by the user.
            // Note: You can also configure an adapter for a network drive (file system on a different machine instead of local fs)
            // using the local adapter. Just point the local adapter root to the network drive.
            var adapter = new LocalAdapter(root);

            // List the newly configured adapter's properties.
            Console.WriteLine("\nLocalAdapter configured. Properties of this LocalAdapter are:");
            Console.WriteLine("  Root: " + adapter.Root);
            Console.WriteLine();
        }
예제 #7
0
        public async Task TestPatternWithDifferentNamespace()
        {
            string       testName     = "TestPatternWithDifferentNamespace";
            var          cdmCorpus    = TestHelper.GetLocalCorpus(testsSubpath, testName);
            LocalAdapter localAdapter = (LocalAdapter)cdmCorpus.Storage.FetchAdapter("local");
            var          localPath    = localAdapter.FullRoot;

            cdmCorpus.Storage.Mount("other", new LocalAdapter(Path.Combine(localPath, "other")));
            var cdmManifest = await cdmCorpus.FetchObjectAsync <CdmManifestDefinition>("local:/patternManifest.manifest.cdm.json");

            await cdmManifest.FileStatusCheckAsync();

            Assert.AreEqual(1, cdmManifest.Entities[0].DataPartitions.Count);
        }