public async Task ResolveMultipleModelsTryFromExpandedPartial(string dtmisExpanded, string dtmisNonExpanded)
        {
            string[] expandedDtmis    = dtmisExpanded.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
            string[] nonExpandedDtmis = dtmisNonExpanded.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
            string[] totalDtmis       = expandedDtmis.Concat(nonExpandedDtmis).ToArray();

            ResolverClientOptions options = new ResolverClientOptions(DependencyResolutionOption.TryFromExpanded);
            ResolverClient        client  = TestHelpers.GetTestClient(TestHelpers.ClientType.Local, options);

            // Multi-resolve dtmi:com:example:TemperatureController;1 + dtmi:com:example:ColdStorage;1
            var result = await client.ResolveAsync(new[] { expandedDtmis[0], nonExpandedDtmis[0] });

            Assert.True(result.Keys.Count == totalDtmis.Length);
            foreach (string id in totalDtmis)
            {
                Assert.True(result.ContainsKey(id));
                Assert.True(TestHelpers.ParseRootDtmiFromJson(result[id]) == id);
            }

            // TODO: Evaluate using Azure.Core.TestFramework in future iteration.

            /*
             * string expandedModelPath = DtmiConventions.DtmiToQualifiedPath(expandedDtmis[0], localClient.RepositoryUri.AbsolutePath, fromExpanded: true);
             * _logger.ValidateLog(StandardStrings.FetchingContent(expandedModelPath), LogLevel.Trace, Times.Once());
             *
             * foreach (string dtmi in nonExpandedDtmis)
             * {
             *  string expectedPath = DtmiConventions.DtmiToQualifiedPath(dtmi, localClient.RepositoryUri.AbsolutePath, fromExpanded: true);
             *  _logger.ValidateLog(StandardStrings.FetchingContent(expectedPath), LogLevel.Trace, Times.Once());
             *  _logger.ValidateLog(StandardStrings.ErrorAccessLocalRepositoryModel(expectedPath), LogLevel.Warning, Times.Once());
             * }
             */
        }
        public async Task FetchLocalRepository(bool fetchExpanded)
        {
            // Casing is irrelevant for fetchers as they grab content based on file-path
            // which will always be lowercase. Casing IS important for the resolve flow
            // and is covered by tests there.
            string targetDtmi = "dtmi:com:example:temperaturecontroller;1";

            ResolverClientOptions options = fetchExpanded ?
                                            new ResolverClientOptions(DependencyResolutionOption.TryFromExpanded) :
                                            new ResolverClientOptions();

            string            expectedPath = DtmiConventions.DtmiToQualifiedPath(targetDtmi, _localUri.AbsolutePath, fetchExpanded);
            LocalModelFetcher localFetcher = new LocalModelFetcher(_logger.Object, options);
            string            fetcherPath  = localFetcher.GetPath(targetDtmi, _localUri, fetchExpanded);

            Assert.AreEqual(fetcherPath, expectedPath);

            // Resolution correctness is covered in ResolverIntegrationTests
            FetchResult fetchResult = await localFetcher.FetchAsync(targetDtmi, _localUri);

            Assert.True(!string.IsNullOrEmpty(fetchResult.Definition));
            Assert.True(!string.IsNullOrEmpty(fetchResult.Path));
            Assert.AreEqual(fetchResult.FromExpanded, fetchExpanded);

            _logger.ValidateLog(StandardStrings.FetchingContent(fetcherPath), LogLevel.Trace, Times.Once());
        }
        public async Task ResolveSingleModelTryFromExpanded(string dtmi, string expectedDeps, TestHelpers.ClientType clientType)
        {
            var expectedDtmis = $"{dtmi},{expectedDeps}".Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

            ResolverClientOptions options = new ResolverClientOptions(DependencyResolutionOption.TryFromExpanded);
            ResolverClient        client  = TestHelpers.GetTestClient(clientType, options);

            var result = await client.ResolveAsync(dtmi);

            Assert.True(result.Keys.Count == expectedDtmis.Length);
            foreach (var id in expectedDtmis)
            {
                Assert.True(result.ContainsKey(id));
                Assert.True(TestHelpers.ParseRootDtmiFromJson(result[id]) == id);
            }

            // TODO: Evaluate using Azure.Core.TestFramework in future iteration.

            /*
             * string expectedPath = DtmiConventions.DtmiToQualifiedPath(
             *  dtmi,
             *  repoType == "local" ? client.RepositoryUri.AbsolutePath : client.RepositoryUri.AbsoluteUri,
             *  fromExpanded: true);
             * _logger.ValidateLog(StandardStrings.FetchingContent(expectedPath), LogLevel.Trace, Times.Once());
             */
        }
Ejemplo n.º 4
0
        public void CtorOverloads()
        {
            string remoteUriStr = "https://dtmi.com";
            Uri    remoteUri    = new Uri(remoteUriStr);

            ResolverClientOptions options = new ResolverClientOptions();

            Assert.AreEqual(new Uri(ResolverClient.DefaultRepository), new ResolverClient().RepositoryUri);
            Assert.AreEqual($"{ResolverClient.DefaultRepository}/", new ResolverClient().RepositoryUri.AbsoluteUri);
            Assert.AreEqual(new Uri(ResolverClient.DefaultRepository), new ResolverClient(options).RepositoryUri);

            Assert.AreEqual(remoteUri, new ResolverClient(remoteUri).RepositoryUri);
            Assert.AreEqual(remoteUri, new ResolverClient(remoteUri, options).RepositoryUri);
            Assert.AreEqual(remoteUri, new ResolverClient(remoteUri, null).RepositoryUri);

            Assert.AreEqual(remoteUri, new ResolverClient(remoteUriStr).RepositoryUri);
            Assert.AreEqual(remoteUri, new ResolverClient(remoteUriStr, options).RepositoryUri);
            Assert.AreEqual(remoteUri, new ResolverClient(remoteUriStr, null).RepositoryUri);

            string localUriStr = TestHelpers.TestLocalModelRepository;
            Uri    localUri    = new Uri(localUriStr);

            Assert.AreEqual(localUri, new ResolverClient(localUri).RepositoryUri);

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                localUriStr = localUriStr.Replace("\\", "/");
            }

            Assert.AreEqual(localUriStr, new ResolverClient(localUri).RepositoryUri.AbsolutePath);
        }
        public async Task ResolveSingleModelWithDepsDisableDependencyResolution(string dtmi, TestHelpers.ClientType clientType)
        {
            ResolverClientOptions options = new ResolverClientOptions(DependencyResolutionOption.Disabled);
            ResolverClient        client  = TestHelpers.GetTestClient(clientType, options);

            var result = await client.ResolveAsync(dtmi);

            Assert.True(result.Keys.Count == 1);
            Assert.True(result.ContainsKey(dtmi));
            Assert.True(TestHelpers.ParseRootDtmiFromJson(result[dtmi]) == dtmi);
        }
        public static ResolverClient GetTestClient(ClientType clientType, ResolverClientOptions clientOptions = null)
        {
            if (clientType == ClientType.Local)
            {
                return(new ResolverClient(TestLocalModelRepository, clientOptions));
            }
            if (clientType == ClientType.Remote)
            {
                return(new ResolverClient(TestRemoteModelRepository, clientOptions));
            }

            throw new ArgumentException();
        }
Ejemplo n.º 7
0
        public void ClientOptions()
        {
            DependencyResolutionOption defaultResolutionOption = DependencyResolutionOption.Enabled;
            ResolverClientOptions      customOptions           =
                new ResolverClientOptions(DependencyResolutionOption.TryFromExpanded);
            int maxRetries = 10;

            customOptions.Retry.MaxRetries = maxRetries;

            string repositoryUriString = "https://localhost/myregistry/";
            Uri    repositoryUri       = new Uri(repositoryUriString);

            ResolverClient defaultClient = new ResolverClient(repositoryUri);

            Assert.AreEqual(defaultResolutionOption, defaultClient.ClientOptions.DependencyResolution);

            ResolverClient customClient = new ResolverClient(repositoryUriString, customOptions);

            Assert.AreEqual(DependencyResolutionOption.TryFromExpanded, customClient.ClientOptions.DependencyResolution);
            Assert.AreEqual(maxRetries, customClient.ClientOptions.Retry.MaxRetries);
        }
Ejemplo n.º 8
0
 public RemoteModelFetcher(ResolverClientOptions clientOptions)
 {
     _pipeline    = CreatePipeline(clientOptions);
     _tryExpanded = clientOptions.DependencyResolution == DependencyResolutionOption.TryFromExpanded;
 }
 public LocalModelFetcher(ResolverClientOptions clientOptions)
 {
     _tryExpanded = clientOptions.DependencyResolution == DependencyResolutionOption.TryFromExpanded;
 }
 public LocalModelFetcher(ILogger logger, ResolverClientOptions clientOptions)
 {
     _logger      = logger;
     _tryExpanded = clientOptions.DependencyResolution == DependencyResolutionOption.TryFromExpanded;
 }