예제 #1
0
        public async Task SaveObjectAsyncTest()
        {
            var accessKey       = "minio_test";
            var secretKey       = "minio_test_pass";
            var s3ClientFactory = new S3ClientFactory()
                                  .SetEndpointUrl(new Uri("http://localhost:19000"))
                                  .SetCredentials(new BasicAWSCredentials(accessKey, secretKey));

            var dynamoDbClientFactory = new DynamoDbClientFactory().SetEndpointUrl(new Uri("http://localhost:18000"));
            var configuration         = new ConfigurationBuilder()
                                        .AddInMemoryCollection(new Dictionary <string, string>()
            {
                [EnvironmentNames.ScoreDynamoDbTableName]             = ScoreTableName,
                [EnvironmentNames.ScoreLargeDataDynamoDbTableName]    = ScoreTableName,
                [EnvironmentNames.ScoreItemDynamoDbTableName]         = ScoreTableName,
                [EnvironmentNames.ScoreItemRelationDynamoDbTableName] = ScoreTableName,
                [EnvironmentNames.ScoreItemS3Bucket]         = ScoreBucket,
                [EnvironmentNames.ScoreDataSnapshotS3Bucket] = ScoreBucket,
            })
                                        .Build();
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddSingleton(dynamoDbClientFactory.Create());
            serviceCollection.AddSingleton(s3ClientFactory.Create());
            serviceCollection.AddSingleton <ScoreQuota>();
            serviceCollection.AddSingleton <IConfiguration>(configuration);
            serviceCollection.AddScoped <Initializer>();
            serviceCollection.AddScoped <ScoreItemAdder>();
            serviceCollection.AddScoped <ScoreItemDeleter>();
            serviceCollection.AddScoped <ScoreItemInfoGetter>();

            await using var provider = serviceCollection.BuildServiceProvider();

            var initializer = provider.GetRequiredService <Initializer>();
            var creator     = provider.GetRequiredService <ScoreItemAdder>();
            var deleter     = provider.GetRequiredService <ScoreItemDeleter>();
            var infoGetter  = provider.GetRequiredService <ScoreItemInfoGetter>();


            var ownerId = Guid.Parse("f2240c15-0f2d-41ce-941d-6b173bae94c0");
            var scoreId = Guid.Parse("0d9fb491-43ae-44a1-9056-55bb25b21187");
            var itemId  = Guid.Parse("cc42d1b1-c6b0-4895-ba74-de6e89d853a1");

            var imageRelativeResourceName = "Resources.pexels-cottonbro-4709821.jpg";

            await using var imageStream = ResourceUtils.CreateResourceStream(imageRelativeResourceName);

            var data = new byte[imageStream.Length];
            await imageStream.ReadAsync(data, 0, data.Length);

            await creator.SaveObjectAsync(ownerId, scoreId, itemId, data, ScoreObjectAccessControls.Public);
        }
        public void GivenFactoryWhenCreateS3ClientShouldSetParametersAndReturnInstance()
        {
            const string key        = "key";
            const string serviceUrl = "https://nyc3.digitaloceanspaces.com";

            var optionsMock = new Mock <ISpacesOptions>();

            optionsMock.SetupGet(x => x.AccessKey)
            .Returns(key)
            .Verifiable();
            optionsMock.SetupGet(x => x.SecretKey)
            .Returns(key)
            .Verifiable();
            optionsMock.SetupGet(x => x.ServiceUrl)
            .Returns(serviceUrl)
            .Verifiable();

            var client = _factory.Create(optionsMock.Object);

            client.Should().NotBeNull();
            client.Should().BeOfType <AmazonS3Client>();
            client.Config.ServiceURL.Should().Be(serviceUrl);
            optionsMock.VerifyAll();
        }
예제 #3
0
        public async Task CreateAsyncTest()
        {
            var accessKey       = "minio_test";
            var secretKey       = "minio_test_pass";
            var s3ClientFactory = new S3ClientFactory()
                                  .SetEndpointUrl(new Uri("http://localhost:19000"))
                                  .SetCredentials(new BasicAWSCredentials(accessKey, secretKey));

            var dynamoDbClientFactory = new DynamoDbClientFactory().SetEndpointUrl(new Uri("http://localhost:18000"));
            var configuration         = new ConfigurationBuilder()
                                        .AddInMemoryCollection(new Dictionary <string, string>()
            {
                [EnvironmentNames.ScoreDynamoDbTableName]             = ScoreTableName,
                [EnvironmentNames.ScoreLargeDataDynamoDbTableName]    = ScoreTableName,
                [EnvironmentNames.ScoreItemDynamoDbTableName]         = ScoreTableName,
                [EnvironmentNames.ScoreItemRelationDynamoDbTableName] = ScoreTableName,
                [EnvironmentNames.ScoreItemS3Bucket]         = ScoreBucket,
                [EnvironmentNames.ScoreDataSnapshotS3Bucket] = ScoreBucket,
            })
                                        .Build();
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddSingleton(dynamoDbClientFactory.Create());
            serviceCollection.AddSingleton(s3ClientFactory.Create());
            serviceCollection.AddSingleton <ScoreQuota>();
            serviceCollection.AddSingleton <IConfiguration>(configuration);
            serviceCollection.AddScoped <Initializer>();
            serviceCollection.AddScoped <ScoreSnapshotCreator>();
            serviceCollection.AddScoped <ScoreSnapshotRemover>();

            await using var provider = serviceCollection.BuildServiceProvider();

            var initializer = provider.GetRequiredService <Initializer>();
            var creator     = provider.GetRequiredService <ScoreSnapshotCreator>();
            var deleter     = provider.GetRequiredService <ScoreSnapshotRemover>();



            var ownerId    = Guid.Parse("80b16bc7-5258-441f-9a2a-d6d95fc16c4a");
            var scoreId    = Guid.Parse("fc4ac609-0914-4cd6-9caa-cada12c7b03d");
            var snapshotId = Guid.Parse("3dd43d78-ff83-46f5-8ed3-fddbc06ec943");

            var data = new ScoreSnapshotDetail()
            {
                Id   = snapshotId,
                Name = "スナップショット名",
                Data = new ScoreData()
                {
                    Title           = "楽譜",
                    DescriptionHash = "楽譜の説明",
                    Annotations     = new [] {
                        new ScoreAnnotation()
                        {
                            Id          = 0,
                            ContentHash = "hash00",
                        },
                        new ScoreAnnotation()
                        {
                            Id          = 1,
                            ContentHash = "hash01",
                        },
                    },
                    Pages = new []
                    {
                        new ScorePage()
                        {
                            Id     = 0,
                            Page   = "page1",
                            ItemId = new Guid("3b74ca20-0e47-49b4-941f-45176766ae7d"),
                        },
                        new ScorePage()
                        {
                            Id     = 1,
                            Page   = "page2",
                            ItemId = new Guid("e3c0a4a6-344d-4247-9932-070ae822186b"),
                        },
                    },
                },
                HashSet = new Dictionary <string, string>()
                {
                    ["hash00"] = "アノテーション1",
                    ["hash01"] = "アノテーション2",
                },
            };
            await creator.CreateSnapshotItemAsync(ownerId, scoreId, data, ScoreObjectAccessControls.Public);
        }
        public async Task DeleteAllAsyncTest()
        {
            var accessKey       = "minio_test";
            var secretKey       = "minio_test_pass";
            var s3ClientFactory = new S3ClientFactory()
                                  .SetEndpointUrl(new Uri("http://localhost:19000"))
                                  .SetCredentials(new BasicAWSCredentials(accessKey, secretKey));

            var dynamoDbClientFactory = new DynamoDbClientFactory().SetEndpointUrl(new Uri("http://localhost:18000"));
            var configuration         = new ConfigurationBuilder()
                                        .AddInMemoryCollection(new Dictionary <string, string>()
            {
                [EnvironmentNames.ScoreDynamoDbTableName]             = ScoreTableName,
                [EnvironmentNames.ScoreLargeDataDynamoDbTableName]    = ScoreTableName,
                [EnvironmentNames.ScoreItemDynamoDbTableName]         = ScoreTableName,
                [EnvironmentNames.ScoreItemRelationDynamoDbTableName] = ScoreTableName,
                [EnvironmentNames.ScoreItemS3Bucket]         = ScoreBucket,
                [EnvironmentNames.ScoreDataSnapshotS3Bucket] = ScoreBucket,
            })
                                        .Build();
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddSingleton(dynamoDbClientFactory.Create());
            serviceCollection.AddSingleton(s3ClientFactory.Create());
            serviceCollection.AddSingleton <ScoreQuota>();
            serviceCollection.AddSingleton <IConfiguration>(configuration);
            serviceCollection.AddScoped <Initializer>();
            serviceCollection.AddScoped <ScoreSnapshotCreator>();
            serviceCollection.AddScoped <ScoreDeleter>();

            await using var provider = serviceCollection.BuildServiceProvider();

            var initializer = provider.GetRequiredService <Initializer>();
            var creator     = provider.GetRequiredService <ScoreSnapshotCreator>();
            var deleter     = provider.GetRequiredService <ScoreDeleter>();

            var ownerId = Guid.Parse("e9ca7322-9dd6-4429-b1d8-d3c9244a68ed");
            var scoreId = Guid.Parse("eea7e8c1-15ec-4f69-a675-364f24099267");

            var snapshotIds = new[]
            {
                Guid.Parse("0ea2f185-8355-439c-a427-d5734c17f886"),
                Guid.Parse("18be42eb-de3c-4899-bdc3-7ed512ce07ae"),
                Guid.Parse("7569ad9a-1bb4-4c33-9cb8-11e5c680a404"),
            };

            var data = new ScoreSnapshotDetail()
            {
                Name = "スナップショット名(delete all)",
                Data = new ScoreData()
                {
                    Title           = "楽譜",
                    DescriptionHash = "楽譜の説明",
                    Annotations     = new [] {
                        new ScoreAnnotation()
                        {
                            Id          = 0,
                            ContentHash = "hash00",
                        },
                        new ScoreAnnotation()
                        {
                            Id          = 1,
                            ContentHash = "hash01",
                        },
                    },
                    Pages = new []
                    {
                        new ScorePage()
                        {
                            Id     = 0,
                            Page   = "page1",
                            ItemId = new Guid("3b74ca20-0e47-49b4-941f-45176766ae7d"),
                        },
                        new ScorePage()
                        {
                            Id     = 1,
                            Page   = "page2",
                            ItemId = new Guid("e3c0a4a6-344d-4247-9932-070ae822186b"),
                        },
                    },
                },
                HashSet = new Dictionary <string, string>()
                {
                    ["hash00"] = "アノテーション1",
                    ["hash01"] = "アノテーション2",
                },
            };

            try
            {
                foreach (var snapshotId in snapshotIds)
                {
                    data.Id = snapshotId;
                    await creator.CreateSnapshotItemAsync(ownerId, scoreId, data, ScoreObjectAccessControls.Public);
                }
            }
            catch
            {
                // 握りつぶす
            }

            await deleter.DeleteAllSnapshotAsync(ownerId, scoreId);
        }
        public async Task DeleteAsyncTest()
        {
            var accessKey       = "minio_test";
            var secretKey       = "minio_test_pass";
            var s3ClientFactory = new S3ClientFactory()
                                  .SetEndpointUrl(new Uri("http://localhost:19000"))
                                  .SetCredentials(new BasicAWSCredentials(accessKey, secretKey));

            var dynamoDbClientFactory = new DynamoDbClientFactory().SetEndpointUrl(new Uri("http://localhost:18000"));
            var configuration         = new ConfigurationBuilder()
                                        .AddInMemoryCollection(new Dictionary <string, string>()
            {
                [EnvironmentNames.ScoreDynamoDbTableName]             = ScoreTableName,
                [EnvironmentNames.ScoreLargeDataDynamoDbTableName]    = ScoreTableName,
                [EnvironmentNames.ScoreItemDynamoDbTableName]         = ScoreTableName,
                [EnvironmentNames.ScoreItemRelationDynamoDbTableName] = ScoreTableName,
                [EnvironmentNames.ScoreItemS3Bucket]         = ScoreBucket,
                [EnvironmentNames.ScoreDataSnapshotS3Bucket] = ScoreBucket,
            })
                                        .Build();
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddSingleton(dynamoDbClientFactory.Create());
            serviceCollection.AddSingleton(s3ClientFactory.Create());
            serviceCollection.AddSingleton <ScoreQuota>();
            serviceCollection.AddSingleton <IConfiguration>(configuration);
            serviceCollection.AddScoped <Initializer>();
            serviceCollection.AddScoped <ScoreSnapshotCreator>();
            serviceCollection.AddScoped <ScoreSnapshotRemover>();

            await using var provider = serviceCollection.BuildServiceProvider();

            var initializer = provider.GetRequiredService <Initializer>();
            var creator     = provider.GetRequiredService <ScoreSnapshotCreator>();
            var deleter     = provider.GetRequiredService <ScoreSnapshotRemover>();

            var ownerId    = Guid.Parse("31937be9-d1df-4076-b2b6-9cb5e2d94a17");
            var scoreId    = Guid.Parse("8a9aaa16-2ca2-4b22-9cf5-21e7b681dbc9");
            var snapshotId = Guid.Parse("f30cd5f5-b807-4273-9299-f95d0baf85b9");

            var data = new ScoreSnapshotDetail()
            {
                Id   = snapshotId,
                Name = "スナップショット名(delete)",
                Data = new ScoreData()
                {
                    Title           = "楽譜",
                    DescriptionHash = "楽譜の説明",
                    Annotations     = new [] {
                        new ScoreAnnotation()
                        {
                            Id          = 0,
                            ContentHash = "hash00",
                        },
                        new ScoreAnnotation()
                        {
                            Id          = 1,
                            ContentHash = "hash01",
                        },
                    },
                    Pages = new []
                    {
                        new ScorePage()
                        {
                            Id     = 0,
                            Page   = "page1",
                            ItemId = new Guid("3b74ca20-0e47-49b4-941f-45176766ae7d"),
                        },
                        new ScorePage()
                        {
                            Id     = 1,
                            Page   = "page2",
                            ItemId = new Guid("e3c0a4a6-344d-4247-9932-070ae822186b"),
                        },
                    },
                },
                HashSet = new Dictionary <string, string>()
                {
                    ["hash00"] = "アノテーション1",
                    ["hash01"] = "アノテーション2",
                },
            };

            try
            {
                await creator.CreateSnapshotItemAsync(ownerId, scoreId, data, ScoreObjectAccessControls.Public);
            }
            catch
            {
                // 握りつぶす
            }

            await deleter.DeleteSnapshotAsync(ownerId, scoreId, snapshotId);
        }
예제 #6
0
        public async Task SetAccessControlPolicyAsyncTest()
        {
            var factory = new S3ClientFactory()
                          .SetRegionSystemName(RegionSystemName);
            var dynamoDbClientFactory = new DynamoDbClientFactory().SetEndpointUrl(new Uri("http://localhost:18000"));
            var bucketName            = BucketName;
            var configuration         = new ConfigurationBuilder()
                                        .AddInMemoryCollection(new Dictionary <string, string>()
            {
                [EnvironmentNames.ScoreDynamoDbTableName]             = ScoreTableName,
                [EnvironmentNames.ScoreLargeDataDynamoDbTableName]    = ScoreTableName,
                [EnvironmentNames.ScoreItemDynamoDbTableName]         = ScoreTableName,
                [EnvironmentNames.ScoreItemRelationDynamoDbTableName] = ScoreTableName,
                [EnvironmentNames.ScoreItemS3Bucket]         = BucketName,
                [EnvironmentNames.ScoreDataSnapshotS3Bucket] = BucketName,
            })
                                        .Build();
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddSingleton(dynamoDbClientFactory.Create());
            serviceCollection.AddSingleton(factory.Create());
            serviceCollection.AddSingleton <ScoreQuota>();
            serviceCollection.AddSingleton <IConfiguration>(configuration);
            serviceCollection.AddScoped <Initializer>();
            serviceCollection.AddScoped <ScoreItemAdder>();
            serviceCollection.AddScoped <ScoreItemDeleter>();
            serviceCollection.AddScoped <ScoreItemInfoGetter>();
            serviceCollection.AddScoped <ScoreAccessSetter>();

            await using var provider = serviceCollection.BuildServiceProvider();

            var initializer  = provider.GetRequiredService <Initializer>();
            var creator      = provider.GetRequiredService <ScoreItemAdder>();
            var deleter      = provider.GetRequiredService <ScoreItemDeleter>();
            var infoGetter   = provider.GetRequiredService <ScoreItemInfoGetter>();
            var accessSetter = provider.GetRequiredService <ScoreAccessSetter>();

            var ownerId  = Guid.Parse("4935be9f-8b08-4de9-a615-96ec04c2e4c5");
            var scoreIds = new[]
            {
                Guid.Parse("b6538dd3-2e2d-47bf-8ad3-1cb23b982309"),
                Guid.Parse("2ee917b6-94fa-469f-a977-14f57d9a7b4e"),
            };
            var itemIds = new[]
            {
                new Guid("6cf18791-0058-426b-b5fb-8f553079a6f5"),
                new Guid("1e69d895-5487-4de6-ae8e-e0f57cd86954"),
            };

            var imageRelativeResourceName = "Resources.pexels-cottonbro-4709821.jpg";

            await using var imageStream = ResourceUtils.CreateResourceStream(imageRelativeResourceName);

            var data = new byte[imageStream.Length];
            await imageStream.ReadAsync(data, 0, data.Length);

            foreach (var scoreId in scoreIds)
            {
                foreach (var itemId in itemIds)
                {
                    await creator.SaveObjectAsync(ownerId, scoreId, itemId, data, ScoreObjectAccessControls.Private);
                }
            }

            await accessSetter.SetScoreItemAccessControlPolicyAsync(ownerId, scoreIds[0], ScoreObjectAccessControls.Public);
        }