public async Task <byte[]> GetAssemblyForSpecification(string specificationId, string etag)
        {
            if (etag.IsNotNullOrWhitespace())
            {
                Stream cachedAssembly = await _specificationAssemblies.GetAssembly(specificationId, etag);

                if (cachedAssembly != null)
                {
                    return(cachedAssembly.ReadAllBytes());
                }
            }

            byte[] assembly =
                await _calculationsApiClientPolicy.ExecuteAsync(() =>
                                                                _calculationsRepository.GetAssemblyBySpecificationId(specificationId));

            if (assembly == null)
            {
                string error = $"Failed to get assembly for specification Id '{specificationId}'";

                _logger.Error(error);

                throw new RetriableException(error);
            }

            await _specificationAssemblies.SetAssembly(specificationId, new MemoryStream(assembly));


            return(assembly);
        }
Exemplo n.º 2
0
        public async Task GetAssemblyForSpecification_GivenAssemblyFoundonSpecificationAssemblies__AssemblyContentReturnedFromSpecificationAssemblies()
        {
            _mockSpecificationAssemblies
            .GetAssembly(Arg.Is(specificationId), Arg.Is(eTag))
            .Returns(new MemoryStream(MockData.GetMockAssembly()));

            byte[] assemblyContent = await _assemblyService.GetAssemblyForSpecification(specificationId, eTag);

            assemblyContent.Should().BeEquivalentTo(MockData.GetMockAssembly());
        }