public async Task ExternalModuleNotInCacheShouldThrow() { var dispatcher = StrictMock.Of <IModuleDispatcher>(); DiagnosticBuilder.ErrorBuilderDelegate?failureBuilder = null; const string UnqualifiedModuleRefStr = "example.azurecr.invalid/foo/bar:v3"; const string ModuleRefStr = "br:" + UnqualifiedModuleRefStr; var moduleReference = OciArtifactModuleReference.TryParse(null, UnqualifiedModuleRefStr, ConfigurationManager.GetBuiltInConfiguration(), out _) !; moduleReference.Should().NotBeNull(); dispatcher.Setup(m => m.TryGetModuleReference(ModuleRefStr, It.IsAny <RootConfiguration>(), out failureBuilder)).Returns(moduleReference); dispatcher.Setup(m => m.GetModuleRestoreStatus(moduleReference, out failureBuilder)).Returns(ModuleRestoreStatus.Unknown); var resolver = StrictMock.Of <IFileResolver>(); var handler = new BicepRegistryCacheRequestHandler(dispatcher.Object, resolver.Object, ConfigurationManager); var @params = new BicepRegistryCacheParams(ModuleRefStr); (await FluentActions .Awaiting(() => handler.Handle(@params, default)) .Should() .ThrowAsync <InvalidOperationException>()) .WithMessage($"The module '{ModuleRefStr}' has not yet been successfully restored."); }
public async Task RestoredValidModuleShouldReturnSuccessfully() { var dispatcher = StrictMock.Of <IModuleDispatcher>(); // needed for mocking out parameters DiagnosticBuilder.ErrorBuilderDelegate?nullBuilder = null; DiagnosticBuilder.ErrorBuilderDelegate?readFailureBuilder = x => x.ErrorOccurredReadingFile("Mock file read failure."); string?fileContents = "mock file contents"; const string UnqualifiedModuleRefStr = "example.azurecr.invalid/foo/bar:v3"; const string ModuleRefStr = "br:" + UnqualifiedModuleRefStr; var moduleReference = OciArtifactModuleReference.TryParse(null, UnqualifiedModuleRefStr, ConfigurationManager.GetBuiltInConfiguration(), out _) !; moduleReference.Should().NotBeNull(); var fileUri = new Uri("file:///main.bicep"); dispatcher.Setup(m => m.TryGetModuleReference(ModuleRefStr, It.IsAny <RootConfiguration>(), out nullBuilder)).Returns(moduleReference); dispatcher.Setup(m => m.GetModuleRestoreStatus(moduleReference, out nullBuilder)).Returns(ModuleRestoreStatus.Succeeded); dispatcher.Setup(m => m.TryGetLocalModuleEntryPointUri(null, moduleReference, out nullBuilder)).Returns(fileUri); var resolver = StrictMock.Of <IFileResolver>(); resolver.Setup(m => m.TryRead(fileUri, out fileContents, out nullBuilder)).Returns(true); var handler = new BicepRegistryCacheRequestHandler(dispatcher.Object, resolver.Object, ConfigurationManager); var @params = new BicepRegistryCacheParams(ModuleRefStr); var response = await handler.Handle(@params, default); response.Should().NotBeNull(); response.Content.Should().Be(fileContents); }
public async Task LocalModuleReferenceShouldThrow() { var dispatcher = StrictMock.Of <IModuleDispatcher>(); DiagnosticBuilder.ErrorBuilderDelegate?failureBuilder = null; const string ModuleRefStr = "./hello.bicep"; var localRef = LocalModuleReference.TryParse(ModuleRefStr, out _); localRef.Should().NotBeNull(); dispatcher.Setup(m => m.TryGetModuleReference(ModuleRefStr, It.IsAny <RootConfiguration>(), out failureBuilder)).Returns(localRef); var resolver = StrictMock.Of <IFileResolver>(); var handler = new BicepRegistryCacheRequestHandler(dispatcher.Object, resolver.Object, ConfigurationManager); var @params = new BicepRegistryCacheParams("/foo/bar/main.bicep", ModuleRefStr); (await FluentActions .Awaiting(() => handler.Handle(@params, default)) .Should() .ThrowAsync <InvalidOperationException>()) .WithMessage($"The specified module reference '{ModuleRefStr}' refers to a local module which is not supported by textDocument/bicepCache requests."); }
public async Task ExternalModuleFailedEntryPointShouldThrow() { var dispatcher = StrictMock.Of <IModuleDispatcher>(); DiagnosticBuilder.ErrorBuilderDelegate?failureBuilder = null; const string UnqualifiedModuleRefStr = "example.azurecr.invalid/foo/bar:v3"; const string ModuleRefStr = "br:" + UnqualifiedModuleRefStr; var configuration = ConfigurationManager.GetBuiltInConfiguration(); var moduleReference = OciArtifactModuleReference.TryParse(null, UnqualifiedModuleRefStr, configuration, out _) !; moduleReference.Should().NotBeNull(); dispatcher.Setup(m => m.TryGetModuleReference(ModuleRefStr, It.IsAny <RootConfiguration>(), out failureBuilder)).Returns(moduleReference); dispatcher.Setup(m => m.GetModuleRestoreStatus(moduleReference, configuration, out failureBuilder)).Returns(ModuleRestoreStatus.Succeeded); dispatcher.Setup(m => m.TryGetLocalModuleEntryPointUri(null, moduleReference, configuration, out failureBuilder)).Returns <Uri?>(null); var resolver = StrictMock.Of <IFileResolver>(); var handler = new BicepRegistryCacheRequestHandler(dispatcher.Object, resolver.Object, ConfigurationManager); var @params = new BicepRegistryCacheParams("/main.bicep", ModuleRefStr); (await FluentActions .Awaiting(() => handler.Handle(@params, default)) .Should() .ThrowAsync <InvalidOperationException>()) .WithMessage($"Unable to obtain the entry point URI for module '{ModuleRefStr}'."); }
public async Task InvalidModuleReferenceShouldThrow() { const string ModuleRefStr = "hello"; var dispatcher = StrictMock.Of <IModuleDispatcher>(); DiagnosticBuilder.ErrorBuilderDelegate?failureBuilder = null; dispatcher.Setup(m => m.TryGetModuleReference(ModuleRefStr, It.IsAny <RootConfiguration>(), out failureBuilder)).Returns <ModuleReference>(null); var resolver = StrictMock.Of <IFileResolver>(); var handler = new BicepRegistryCacheRequestHandler(dispatcher.Object, resolver.Object, ConfigurationManager); var @params = new BicepRegistryCacheParams(ModuleRefStr); (await FluentActions .Awaiting(() => handler.Handle(@params, default)) .Should() .ThrowAsync <InvalidOperationException>()) .WithMessage($"The client specified an invalid module reference '{ModuleRefStr}'."); }
public async Task FailureToReadEntryPointShouldThrow() { var dispatcher = StrictMock.Of <IModuleDispatcher>(); // needed for mocking out parameters DiagnosticBuilder.ErrorBuilderDelegate?nullBuilder = null; DiagnosticBuilder.ErrorBuilderDelegate?readFailureBuilder = x => x.ErrorOccurredReadingFile("Mock file read failure."); string?fileContents = null; const string UnqualifiedModuleRefStr = "example.azurecr.invalid/foo/bar:v3"; const string ModuleRefStr = "br:" + UnqualifiedModuleRefStr; var configuration = ConfigurationManager.GetBuiltInConfiguration(); var moduleReference = OciArtifactModuleReference.TryParse(null, UnqualifiedModuleRefStr, configuration, out _) !; moduleReference.Should().NotBeNull(); var fileUri = new Uri("file:///main.bicep"); dispatcher.Setup(m => m.TryGetModuleReference(ModuleRefStr, It.IsAny <RootConfiguration>(), out nullBuilder)).Returns(moduleReference); dispatcher.Setup(m => m.GetModuleRestoreStatus(moduleReference, configuration, out nullBuilder)).Returns(ModuleRestoreStatus.Succeeded); dispatcher.Setup(m => m.TryGetLocalModuleEntryPointUri(null, moduleReference, configuration, out nullBuilder)).Returns(fileUri); var resolver = StrictMock.Of <IFileResolver>(); resolver.Setup(m => m.TryRead(fileUri, out fileContents, out readFailureBuilder)).Returns(false); var handler = new BicepRegistryCacheRequestHandler(dispatcher.Object, resolver.Object, ConfigurationManager); var @params = new BicepRegistryCacheParams(fileUri.AbsolutePath, ModuleRefStr); (await FluentActions .Awaiting(() => handler.Handle(@params, default)) .Should() .ThrowAsync <InvalidOperationException>()) .WithMessage($"Unable to read file 'file:///main.bicep'. An error occurred reading file. Mock file read failure."); }