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()); */ }
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(); }
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); }
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; }