public void FetchLocalRepositoryModelDoesNotExist() { string targetDtmi = "dtmi:com:example:thermojax;1"; LocalModelFetcher localFetcher = new LocalModelFetcher(_logger.Object, new ResolverClientOptions()); Assert.ThrowsAsync <FileNotFoundException>(async() => await localFetcher.FetchAsync(targetDtmi, _localUri)); string expectedModelPath = DtmiConventions.DtmiToQualifiedPath(targetDtmi, _localUri.AbsolutePath); _logger.ValidateLog(StandardStrings.ErrorAccessLocalRepositoryModel(expectedModelPath), LogLevel.Warning, Times.Once()); }
public FetchResult Fetch(string dtmi, Uri repositoryUri, CancellationToken cancellationToken = default) { string registryPath = repositoryUri.AbsolutePath; if (!Directory.Exists(registryPath)) { string dnfError = StandardStrings.ErrorAccessLocalRepository(registryPath); _logger.LogError(dnfError); throw new DirectoryNotFoundException(dnfError); } Queue <string> work = new Queue <string>(); if (_tryExpanded) { work.Enqueue(GetPath(dtmi, repositoryUri, true)); } work.Enqueue(GetPath(dtmi, repositoryUri, false)); string fnfError = string.Empty; while (work.Count != 0 && !cancellationToken.IsCancellationRequested) { string tryContentPath = work.Dequeue(); _logger.LogTrace(StandardStrings.FetchingContent(tryContentPath)); if (EvaluatePath(tryContentPath)) { return(new FetchResult() { Definition = File.ReadAllText(tryContentPath, Encoding.UTF8), Path = tryContentPath }); } fnfError = StandardStrings.ErrorAccessLocalRepositoryModel(tryContentPath); _logger.LogWarning(fnfError); } throw new FileNotFoundException(fnfError); }