コード例 #1
0
ファイル: ArtifactStorage.cs プロジェクト: lulzzz/Spin
        public async Task Set(ArtifactPayload artifactPayload, CancellationToken token = default)
        {
            artifactPayload.VerifyNotNull(nameof(artifactPayload));

            ArtifactId artifactId = new ArtifactId(artifactPayload.Id);

            _logger.LogTrace($"{nameof(Set)}: Writing {artifactId}");
            await _dataLakeStore.Write(RealPath(artifactId), artifactPayload.ToBytes(), true, token);
        }
コード例 #2
0
ファイル: ArtifactClient.cs プロジェクト: lulzzz/Spin
        public async Task Set(ArtifactPayload articlePayload, CancellationToken token = default)
        {
            articlePayload.VerifyNotNull(nameof(articlePayload));

            _logger.LogTrace($"{nameof(Set)}: Id={articlePayload.Id}");

            HttpResponseMessage message = await _httpClient.PostAsJsonAsync("api/artifact", articlePayload, token);

            message.EnsureSuccessStatusCode();
        }
コード例 #3
0
ファイル: ArtifactPayloadActor.cs プロジェクト: lulzzz/Spin
        public async Task Set(ArtifactPayload artifactPayload, CancellationToken token)
        {
            artifactPayload.VerifyNotNull(nameof(artifactPayload))
            .VerifyAssert(x => artifactPayload.Id.ToLower() == ActorKey.Value, $"Id mismatch - id={artifactPayload.Id.ToLower()}, actorKey={ActorKey}");

            _logger.LogTrace($"{nameof(Set)}: Writing {artifactPayload.Id}");
            await _storage.Set(artifactPayload, token);

            _cache.Set(artifactPayload);
        }
コード例 #4
0
ファイル: ArtifactController.cs プロジェクト: lulzzz/Spin
        public async Task <IActionResult> Post([FromBody] ArtifactPayload record)
        {
            if (!record.IsValid())
            {
                return(BadRequest());
            }

            await _acticleStoreService.Set(record);

            return(Ok());
        }
コード例 #5
0
        public async Task Set(ArtifactPayload record, CancellationToken token = default)
        {
            record.VerifyNotNull(nameof(record));

            var actorKey = new ActorKey(new ArtifactId(record.Id).ToString());

            _logger.LogTrace($"{nameof(Set)}: actorKey={actorKey}, id={record.Id}");

            IArtifactPayloadActor actor = _actorHost !.GetActor <IArtifactPayloadActor>(actorKey);
            await actor.Set(record, token);
        }
コード例 #6
0
ファイル: ArtifactPayloadTests.cs プロジェクト: lulzzz/Spin
        public void GivenPayloadSource_ShouldRoundTrip()
        {
            ArtifactId artifactId = new ArtifactId("namespace/file.ext");
            string     payload    = "This is the payload";

            byte[] payloadBytes = Encoding.UTF8.GetBytes(payload);

            ArtifactPayload artifactPayload = payloadBytes.ToArtifactPayload(artifactId);

            byte[] fromPayload = artifactPayload.ToBytes();
            Enumerable.SequenceEqual(payloadBytes, fromPayload).Should().BeTrue();
        }
コード例 #7
0
 public static bool IsValid(this ArtifactPayload subject)
 {
     try
     {
         subject.Verify();
         return(true);
     }
     catch (ArgumentException)
     {
         return(false);
     }
 }
コード例 #8
0
        public static void Verify(this ArtifactPayload subject)
        {
            subject.VerifyNotNull(nameof(subject));

            subject.Id.VerifyNotEmpty(nameof(subject.Id));
            subject.PackagePayload.VerifyAssert(x => x?.Length > 0, $"{nameof(subject.PackagePayload)} is required");
            subject.Hash.VerifyNotEmpty($"{nameof(subject.Hash)} is required");

            byte[] packagePayload = Convert.FromBase64String(subject.PackagePayload);
            byte[] hash           = MD5.Create().ComputeHash(packagePayload);

            Convert.ToBase64String(hash).VerifyAssert(x => x == subject.Hash, "Hash verification failed");
        }
コード例 #9
0
        public static ArtifactPayload ToArtifactPayload(this byte[] subject, ArtifactId articleId)
        {
            subject.VerifyAssert(x => x?.Length > 0, $"{nameof(subject)} is empty");
            articleId.VerifyNotNull(nameof(articleId));

            var payload = new ArtifactPayload
            {
                Id             = (string)articleId,
                PackagePayload = Convert.ToBase64String(subject),
                Hash           = Convert.ToBase64String(MD5.Create().ComputeHash(subject)),
            };

            payload.Verify();
            return(payload);
        }
コード例 #10
0
        public async Task GivenData_WhenRoundTrip_ShouldMatch(string id)
        {
            TestWebsiteHost host = TestApplication.GetHost();

            const string payload    = "This is a test";
            ArtifactId   artifactId = new ArtifactId(id);

            byte[] bytes = Encoding.UTF8.GetBytes(payload);

            ArtifactPayload articlePayload = bytes.ToArtifactPayload(artifactId);

            await host.ArtifactClient.Set(articlePayload);

            ArtifactPayload?readPayload = await host.ArtifactClient.Get(artifactId);

            readPayload.Should().NotBeNull();

            (articlePayload == readPayload).Should().BeTrue();

            string payloadText = Encoding.UTF8.GetString(readPayload !.ToBytes());

            payloadText.Should().Be(payload);

            var search = new QueryParameter {
                Namespace = artifactId.Namespace
            };

            BatchSet <string> searchList = await host.ArtifactClient.List(search).ReadNext();

            searchList.Should().NotBeNull();
            searchList.Records.Any(x => x.StartsWith(artifactId.Path)).Should().BeTrue();

            (await host.ArtifactClient.Delete(artifactId)).Should().BeTrue();

            searchList = await host.ArtifactClient.List(search).ReadNext();

            searchList.Should().NotBeNull();
            searchList.Records.Any(x => x.StartsWith(artifactId.Path)).Should().BeFalse();
        }
コード例 #11
0
        public static byte[] ToBytes(this ArtifactPayload subject)
        {
            subject.Verify();

            return(Convert.FromBase64String(subject.PackagePayload));
        }