public void TestInitialize() { // 関連DBデータを作成 _dataOnDb = DbTestHelper.CreateMasterTables(); _dataOnDb = DbTestHelper.CreateDeliveries(_dataOnDb); _dataOnDb = DbTestHelper.CreateDevices(_dataOnDb); }
// [DynamicData("aa",DynamicDataSourceType.Method)] public async Task Index_Success_CopyedFile() { // 前提条件 // ・ファイルがCollectingBlob上に存在する。 // あと条件 // ・ファイルがPrimaryBlob上にコピーされる。 // TestInitialize DbTestHelper.DeleteAll(); var dataOnDb = DbTestHelper.CreateMasterTables(); dataOnDb = DbTestHelper.CreateDevices(dataOnDb); var owner = dataOnDb.Get <DtDevice>().First().EdgeId.ToString(); // 設定値が空 var diBuilder = new TestDiProviderBuilder(); diBuilder.ServiceCollection.AddTransient <ITimeProvider>(x => UnitTestHelper.CreateTimeProvider(new DateTime(2020, 3, 1))); var provider = diBuilder.Build(); // テストデータ作成 // 準備として、Primary,Collectingのファイルを全部消す。 var settings = provider.GetService <AppSettings>(); await DeleteContainerOnBlob(settings.CollectingBlobConnectionString, "collect"); await DeleteContainerOnBlob(settings.CollectingBlobConnectionString, "unknown"); await DeleteContainerOnBlob(settings.PrimaryBlobConnectionString, "log"); await DeleteContainerOnBlob(settings.PrimaryBlobConnectionString, "error"); await DeleteContainerOnBlob(settings.PrimaryBlobConnectionString, "device"); await CreateTestFilesOnCollectingBlob(settings, owner); // テスト対象 var target = provider.GetService <IIndexBlobService>(); target.Index(); // 結果確認 //var _account = CloudStorageAccount.Parse(settings.CoreStorageCollectingConnectionString); //var client = _account.CreateCloudBlobClient(); //var container = client.GetContainerReference(settings.CoreStorageCollectingCollectContainerName); //var blob1 = container.GetBlockBlobReference(filePath); // CollectingBlobにファイルがないことを確認。 // PrimaryBlobにそのファイルがあることを確認。 // DBにファイルがあることを確認。 }
public void Update403ErrorIfStatusIsNotStarted() { // DbSetup DbTestHelper.DeleteAll(); var list = DbTestHelper.CreateMasterTables(); list = DbTestHelper.CreateDeliveries(list); list = DbTestHelper.CreateDevices(list); // Target Create var builder = new TestDiProviderBuilder(); builder.ServiceCollection.AddTransient <DeliveryGroupsController>(); var controller = builder.Build().GetService <DeliveryGroupsController>(); // 配信グループデータを作成し、SIDを読み込む(作成・読み込み結果は別テストで判定するためここでは省略) var statusStarted = new DeliveryGroupAddRequestDto() { DeliveryFileSid = list.GetDtDeliveryFileSid(), // これがNotStartではないのが本テストのポイント。 // HACK: この // DeliveryGroupStatusSid = list.GetMtDeliveryGroupStatusSid( "started" ), Name = "UnitTest", StartDatetime = new DateTime(2099, 12, 31), // DownloadDelayTime DeliveryDestinations = new DeliveryResultAddRequestDto[] { } }; var createResponse = controller.PostDeliveryGroup(statusStarted, UnitTestHelper.CreateLogger()) as OkObjectResult; var createResponseValue = createResponse.Value as DeliveryGroupResponseDto; // 更新処理 var updateActual = new DeliveryGroupUpdateRequestDto() { Name = "updateExpectedName", StartDatetime = new DateTime(2050, 6, 1), // DownloadDelayTime RowVersion = createResponseValue.RowVersion }; var actual = controller.PutDeliveryGroup(updateActual, createResponseValue.Sid, UnitTestHelper.CreateLogger()); // 403が返るかチェック Assert.IsInstanceOfType(actual, typeof(StatusCodeResult)); var statucCodeResult = actual as StatusCodeResult; Assert.AreEqual(StatusCodes.Status403Forbidden, statucCodeResult.StatusCode); }
public void Onepass() { // DbSetup DbTestHelper.DeleteAll(); var dataOnDb = DbTestHelper.CreateMasterTables(); dataOnDb = DbTestHelper.CreateDeliveries(dataOnDb); dataOnDb = DbTestHelper.CreateDevices(dataOnDb); // Target Create var builder = new TestDiProviderBuilder(); builder.ServiceCollection.AddTransient <CleanDbService>(); var provider = builder.Build(); var service = provider.GetService <CleanDbService>(); // 削除対象Insert Dictionary <string, object> dic = new Dictionary <string, object>(); dic.Add("DeviceSid", dataOnDb.GetDtDeviceSid()); dic.Add("CreateDatetime", "2019/12/31 23:59:59"); dic.Add("IsLatest", true); DbTestHelper.ExecuteInsertSqlCommand("DtInventory", dic); /* SSMSなどで登録されているかチェック */ // DbCleaner削除対象設定 var diBuilder = new TestDiProviderBuilder(); diBuilder.AddConfigure("DbCleanTarget_DtInventory", "1"); // DbCleaner実行 service.Clean(); /* SSMSなどで削除されているかチェック */ }
public void CRUDOperationOKTest() { // DbSetup DbTestHelper.DeleteAll(); var dataOnDb = DbTestHelper.CreateMasterTables(); dataOnDb = DbTestHelper.CreateDeliveries(dataOnDb); dataOnDb = DbTestHelper.CreateDevices(dataOnDb); // Target Create var builder = new TestDiProviderBuilder(); builder.ServiceCollection.AddTransient <DeliveryGroupsController>(); var provider = builder.Build(); var controller = provider.GetService <DeliveryGroupsController>(); //////////// // Create // //////////// var createActual = new DeliveryGroupAddRequestDto() { DeliveryFileSid = dataOnDb.GetDtDeliveryFileSid(), // DeliveryGroupStatusSid = dataOnDb.GetMtDeliveryGroupStatusSid(), Name = "UnitTest", StartDatetime = new DateTime(2099, 12, 31), // DownloadDelayTime DeliveryDestinations = new DeliveryResultAddRequestDto[] { new DeliveryResultAddRequestDto() { DeviceSid = dataOnDb.GetDtDeviceSid(), GatewayDeviceSid = dataOnDb.GetDtDeviceSid(), } } }; // OKが返るかチェック var createResponse = controller.PostDeliveryGroup(createActual, UnitTestHelper.CreateLogger()); Assert.IsInstanceOfType(createResponse, typeof(OkObjectResult)); // OKなら型変換 var createResponseValue = (createResponse as OkObjectResult).Value as DeliveryGroupResponseDto; // レスポンス値チェック(追加データと変更がないこと) Assert.IsNotNull(createResponseValue); Assert.AreEqual(createActual.DeliveryFileSid, createResponseValue.DeliveryFileSid); Assert.AreEqual(createActual.Name, createResponseValue.Name); Assert.AreEqual(createActual.StartDatetime, createResponseValue.StartDatetime); //Assert.AreEqual(createActual.DeliveryDestinations[0].DeviceSid, createResponseValue.DeliveryDestinations[0].DeviceSid); //Assert.AreEqual(createActual.DeliveryDestinations[0].GatewayDeviceSid, createResponseValue.DeliveryDestinations[0].GatewayDeviceSid); ////////// // Read // ////////// // ReadはWebAPIがないのでリポジトリから直接確認。 var groupRepository = provider.GetRequiredService <IDtDeliveryGroupRepository>(); var readActual = groupRepository.ReadDtDeliveryGroup(createResponseValue.Sid); // 取得値チェック(追加データレスポンス値と差異がないこと) var entity = readActual; Assert.IsNotNull(entity); Assert.AreEqual(createResponseValue.Sid, entity.Sid); Assert.AreEqual(createResponseValue.DeliveryFileSid, entity.DeliveryFileSid); Assert.AreEqual(createResponseValue.DeliveryGroupStatusSid, entity.DeliveryGroupStatusSid); Assert.AreEqual(createResponseValue.Name, entity.Name); Assert.AreEqual(createResponseValue.StartDatetime, entity.StartDatetime); Assert.AreEqual(createResponseValue.DownloadDelayTime, entity.DownloadDelayTime); Assert.AreEqual(createResponseValue.CreateDatetime, entity.CreateDatetime); Assert.AreEqual(createResponseValue.UpdateDatetime, entity.UpdateDatetime); Assert.AreEqual(createResponseValue.RowVersion, WebApiHelper.ConvertByteArrayToLong(entity.RowVersion)); Assert.AreEqual(createResponseValue.DeliveryDestinations[0].DeviceSid, entity.DtDeliveryResult.ToList()[0].DeviceSid); Assert.AreEqual(createResponseValue.DeliveryDestinations[0].GatewayDeviceSid, entity.DtDeliveryResult.ToList()[0].GwDeviceSid); //////////// // Update // //////////// var updateActual = new DeliveryGroupUpdateRequestDto() { Name = "updateExpectedName", StartDatetime = new DateTime(2050, 6, 1), // DownloadDelayTime RowVersion = createResponseValue.RowVersion }; // OKが返るかチェック var updateResponse = controller.PutDeliveryGroup(updateActual, createResponseValue.Sid, UnitTestHelper.CreateLogger()); Assert.IsInstanceOfType(updateResponse, typeof(OkObjectResult)); // OKなら型変換 var updateResponseValue = (updateResponse as OkObjectResult).Value as DeliveryGroupResponseDto; // レスポンス値チェック(更新データに変更がないこと) Assert.IsNotNull(updateResponseValue); Assert.AreEqual(createResponseValue.Sid, updateResponseValue.Sid); Assert.AreEqual(updateActual.Name, updateResponseValue.Name); Assert.AreEqual(updateActual.StartDatetime, updateResponseValue.StartDatetime); // RowVersionは変更されていること Assert.AreNotEqual(updateActual.RowVersion.Value, updateResponseValue.RowVersion); // 更新値になっているかDBデータをチェックする var updatedReadActual = groupRepository.ReadDtDeliveryGroup(updateResponseValue.Sid); // 取得値チェック(更新データと差異がないこと) var updatedEntity = updatedReadActual; Assert.IsNotNull(updatedEntity); Assert.AreEqual(updateResponseValue.Name, updatedEntity.Name); Assert.AreEqual(updateResponseValue.StartDatetime, updatedEntity.StartDatetime); //Assert.AreEqual(updateResponseValue.UpdatedAtUtc, updatedEntity.UpdateDatetime); Assert.AreEqual(updateResponseValue.RowVersion, WebApiHelper.ConvertByteArrayToLong(updatedEntity.RowVersion)); // その他項目は作成したデータのままであること Assert.AreEqual(createResponseValue.Sid, updatedEntity.Sid); Assert.AreEqual(createResponseValue.DeliveryFileSid, updatedEntity.DeliveryFileSid); Assert.AreEqual(createResponseValue.DeliveryGroupStatusSid, updatedEntity.DeliveryGroupStatusSid); Assert.AreEqual(createResponseValue.DownloadDelayTime, updatedEntity.DownloadDelayTime); //Assert.AreEqual(createResponseValue.CreatedAtUtc, updatedEntity.CreateDatetime); //Assert.AreEqual(createResponseValue.DeliveryDestinations[0].DeviceSid, updatedEntity.DtDeliveryResult.ToList()[0].DeviceSid); //Assert.AreEqual(createResponseValue.DeliveryDestinations[0].GatewayDeviceSid, updatedEntity.DtDeliveryResult.ToList()[0].GwDeviceSid); //////////// // Delete // //////////// // OKが返るかチェック var deleteResponse = controller.DeleteDeliveryGroup(null, updateResponseValue.Sid, updateResponseValue.RowVersion, UnitTestHelper.CreateLogger()); Assert.IsInstanceOfType(deleteResponse, typeof(OkObjectResult)); // OKなら型変換 var deleteResponseValue = (deleteResponse as OkObjectResult).Value as DeliveryGroupResponseDto; // レスポンス値チェック(指定データに変更がないこと) Assert.IsNotNull(deleteResponseValue); Assert.AreEqual(updateResponseValue.Sid, deleteResponseValue.Sid); Assert.AreEqual(updateResponseValue.RowVersion, deleteResponseValue.RowVersion); // NotFoundになっているかDBデータをチェックする var deletedReadActual = groupRepository.ReadDtDeliveryGroup(deleteResponseValue.Sid); Assert.IsNull(deletedReadActual); }
public void CRUDOperationTest() { // TestInitialize DbTestHelper.DeleteAll(); var dataOnDb = DbTestHelper.CreateMasterTables(); dataOnDb = DbTestHelper.CreateDevices(dataOnDb); // Target Create var builder = new TestDiProviderBuilder(); builder.ServiceCollection.AddTransient <DeliveryFilesController>(); var createdDatetime = new DateTime(2030, 1, 1); builder.ServiceCollection.AddSingleton <ITimeProvider>(UnitTestHelper.CreateTimeProvider(createdDatetime)); var provider = builder.Build(); var controller = provider.GetService <DeliveryFilesController>(); //////////// // Create // //////////// var requestCreate = new DeliveryFileAddRequestDto() { DeliveryFileType = new DeliveryFileTypeMasterDto() { DeliveryFileTypeSid = dataOnDb.Get <MtDeliveryFileType>()[0].Sid, DeliveryFileTypeCode = dataOnDb.Get <MtDeliveryFileType>()[0].Code }, FilePath = "filepath", EquipmentModels = new List <ModelMasterDto>() { new ModelMasterDto() { ModelSid = dataOnDb.Get <MtEquipmentModel>()[0].Sid, ModelCode = dataOnDb.Get <MtEquipmentModel>()[0].Code }, new ModelMasterDto() { ModelSid = dataOnDb.Get <MtEquipmentModel>()[1].Sid, ModelCode = dataOnDb.Get <MtEquipmentModel>()[1].Code }, }, InstallType = new InstallTypeMasterDto() { InstallTypeSid = dataOnDb.Get <MtInstallType>()[0].Sid, InstallTypeCode = dataOnDb.Get <MtInstallType>()[0].Code }, Version = "v3.0", InstallableVersion = "v1.0,v2.0", Description = "description", InformationId = "200" }; long targetDeliveryFileSid; var response = controller.PostDeliveryFile(requestCreate, UnitTestHelper.CreateLogger()) as OkObjectResult; Assert.IsNotNull(response); var responseCreate = response.Value as DeliveryFileResponseDto; targetDeliveryFileSid = responseCreate.Sid; long latestRowVersion = responseCreate.RowVersion.Value; // リクエストとレスポンスの比較 Assert.IsTrue(responseCreate.Sid > 0); Assert.AreEqual(requestCreate.DeliveryFileType.DeliveryFileTypeSid, responseCreate.DeliveryFileTypeSid); Assert.AreEqual(requestCreate.FilePath, responseCreate.FilePath); AssertResponse(requestCreate.EquipmentModels, responseCreate.EquipmentModels, responseCreate.CreateDatetime.Value); Assert.AreEqual(requestCreate.InstallType.InstallTypeSid, responseCreate.InstallTypeSid); Assert.AreEqual(requestCreate.Version, responseCreate.Version); Assert.AreEqual(requestCreate.InstallableVersion, responseCreate.InstallableVersion); Assert.AreEqual(requestCreate.Description, responseCreate.Description); Assert.AreEqual(requestCreate.InformationId, responseCreate.InformationId); Assert.IsFalse(responseCreate.IsCanceled.HasValue); Assert.IsNotNull(responseCreate.RowVersion); Assert.AreEqual(createdDatetime, responseCreate.CreateDatetime); Assert.AreEqual(createdDatetime, responseCreate.UpdateDatetime); // ==== Read // ReadはWebAPIがないのでリポジトリから直接確認。 var repository = provider.GetRequiredService <IDtDeliveryFileRepository>(); var readCreated = repository.ReadDtDeliveryFile(targetDeliveryFileSid); latestRowVersion = AssertResponse(responseCreate, readCreated); // === Update // DateTimeProviderを再注入し、更新時に更新されることを確認する。 var updatedDateTime = new DateTime(2050, 3, 1); builder.ServiceCollection.AddSingleton <ITimeProvider>(UnitTestHelper.CreateTimeProvider(updatedDateTime)); provider = builder.Build(); controller = provider.GetService <DeliveryFilesController>(); // 更新データ作成 var requestUpdated = new DeliveryFileUpdateRequestDto() { DeliveryFileType = new DeliveryFileTypeMasterDto() { DeliveryFileTypeSid = dataOnDb.Get <MtDeliveryFileType>()[1].Sid, DeliveryFileTypeCode = dataOnDb.Get <MtDeliveryFileType>()[1].Code }, EquipmentModels = new List <ModelMasterDto>() { new ModelMasterDto() { ModelSid = dataOnDb.Get <MtEquipmentModel>()[2].Sid, ModelCode = dataOnDb.Get <MtEquipmentModel>()[2].Code } }, InstallType = new InstallTypeMasterDto() { InstallTypeSid = dataOnDb.Get <MtInstallType>()[1].Sid, InstallTypeCode = dataOnDb.Get <MtInstallType>()[1].Code }, Version = "v4.0", InstallableVersion = "v3.0,v2.0", Description = "updated description", InformationId = "300", RowVersion = latestRowVersion }; var responseUpdated = controller.PutDeliveryFile(requestUpdated, targetDeliveryFileSid, UnitTestHelper.CreateLogger()) as OkObjectResult; Assert.IsNotNull(responseUpdated); var responseUpdatedDto = responseUpdated.Value as DeliveryFileResponseDto; Assert.AreEqual(targetDeliveryFileSid, responseUpdatedDto.Sid); Assert.AreEqual(requestUpdated.DeliveryFileType.DeliveryFileTypeSid, responseUpdatedDto.DeliveryFileTypeSid); AssertResponse(requestUpdated.EquipmentModels, responseUpdatedDto.EquipmentModels, responseUpdatedDto.UpdateDatetime.Value); Assert.AreEqual(requestUpdated.InstallType.InstallTypeSid, responseUpdatedDto.InstallTypeSid); Assert.AreEqual(requestUpdated.Version, responseUpdatedDto.Version); Assert.AreEqual(requestUpdated.InstallableVersion, responseUpdatedDto.InstallableVersion); Assert.AreEqual(requestUpdated.Description, responseUpdatedDto.Description); Assert.AreEqual(requestUpdated.InformationId, responseUpdatedDto.InformationId); Assert.IsFalse(responseUpdatedDto.IsCanceled.HasValue); Assert.IsNotNull(responseUpdatedDto.RowVersion); Assert.AreEqual(createdDatetime, responseUpdatedDto.CreateDatetime); Assert.AreEqual(updatedDateTime, responseUpdatedDto.UpdateDatetime); latestRowVersion = responseUpdatedDto.RowVersion.Value; // ==== Read var readUpdated = repository.ReadDtDeliveryFile(targetDeliveryFileSid); latestRowVersion = AssertResponse(responseUpdatedDto, readUpdated); // === Delete var deletedResponse = controller.DeleteDeliveryFile( null, targetDeliveryFileSid, latestRowVersion, UnitTestHelper.CreateLogger()) as OkObjectResult; Assert.IsNotNull(deletedResponse); var deleteResponse = deletedResponse.Value as DeliveryFileResponseDto; Assert.IsNotNull(deleteResponse); // HACK: Deleteの戻り値が一致するかどうかのテスト // 子テーブルの削除に失敗する。db側にon delete cascadeを追加する。 // 取得して存在しないことを確認 var readResult = repository.ReadDtDeliveryFile(deleteResponse.Sid); Assert.IsNull(readResult); }
public void Update403ErrorIfStatusIsNotStarted() { // DbSetup DbTestHelper.DeleteAll(); var dataOnDb = DbTestHelper.CreateMasterTables(); dataOnDb = DbTestHelper.CreateDeliveries(dataOnDb); dataOnDb = DbTestHelper.CreateDevices(dataOnDb); // Target Create var builder = new TestDiProviderBuilder(); builder.ServiceCollection.AddTransient <DeliveryGroupsController>(); builder.ServiceCollection.AddTransient <DeliveryFilesController>(); var provider = builder.Build(); // Init // 配信グループデータを作成し、SIDを読み込む(作成・読み込み結果は別テストで判定するためここでは省略) var targetDeliveryFileSid = dataOnDb.GetDtDeliveryFileSid(); var delGroupController = provider.GetService <DeliveryGroupsController>(); // 配信グループデータを複数作成する。 // これがNotStartではないのが本テストのポイント。 DeliveryGroupAddRequestDto statusStarted = CreateDeliveryGroupAddRequestDto(dataOnDb, targetDeliveryFileSid, "started"); Assert.IsNotNull(delGroupController.PostDeliveryGroup(statusStarted, UnitTestHelper.CreateLogger()) as OkObjectResult); statusStarted = CreateDeliveryGroupAddRequestDto(dataOnDb, targetDeliveryFileSid, Const.DeliveryGroupStatus.NotStarted); Assert.IsNotNull(delGroupController.PostDeliveryGroup(statusStarted, UnitTestHelper.CreateLogger()) as OkObjectResult); statusStarted = CreateDeliveryGroupAddRequestDto(dataOnDb, targetDeliveryFileSid, Const.DeliveryGroupStatus.NotStarted); Assert.IsNotNull(delGroupController.PostDeliveryGroup(statusStarted, UnitTestHelper.CreateLogger()) as OkObjectResult); // 更新処理 // 対象の配信ファイル情報はDbSetupで作成済み var createdDeliveryFile = dataOnDb.Get <DtDeliveryFile>().First(); var rowVersionAtCreated = WebApiHelper.ConvertByteArrayToLong(createdDeliveryFile.RowVersion); var requestUpdated = new DeliveryFileUpdateRequestDto() { DeliveryFileType = new DeliveryFileTypeMasterDto() { DeliveryFileTypeSid = dataOnDb.Get <MtDeliveryFileType>()[0].Sid, DeliveryFileTypeCode = dataOnDb.Get <MtDeliveryFileType>()[0].Code }, // 本テストの本筋ではないため、コメントアウトのまま。 //EquipmentModel = "UpdatedHOGEHOGE500", //InstallType = "UpdatedType1", Version = "v4.0", InstallableVersion = "v3.0,v2.0", Description = "updated description", InformationId = "300", RowVersion = rowVersionAtCreated }; var actual = provider .GetService <DeliveryFilesController>() .PutDeliveryFile(requestUpdated, targetDeliveryFileSid, UnitTestHelper.CreateLogger()); // 403が返るかチェック Assert.IsInstanceOfType(actual, typeof(StatusCodeResult)); var statucCodeResult = actual as StatusCodeResult; Assert.AreEqual(StatusCodes.Status403Forbidden, statucCodeResult.StatusCode); // 更新されていないことを確認 var repository = provider.GetRequiredService <IDtDeliveryFileRepository>(); var readUpdated = repository.ReadDtDeliveryFile(targetDeliveryFileSid); Assert.IsNotNull(readUpdated); // RowVersionが更新されていなければ問題ないと判定する。 var readResponseDto = readUpdated.ConvertUtilityToResponseDto(); Assert.AreEqual(rowVersionAtCreated, readResponseDto.RowVersion.Value); }