public async Task GetModuleTwinsTest(string query, string continuationToken) { const string resultToken = "nextToken"; var twinList = new List <TwinServiceModel>() { ModulesControllerTest.CreateTestTwin("d", "m") }; var twins = new TwinServiceListModel(twinList, resultToken); this.devicesMock.Setup(x => x.GetModuleTwinsByQueryAsync(query, continuationToken)) .ReturnsAsync(twins); this.httpContext.Request.Headers.Add(CONTINUATION_TOKEN_NAME, new StringValues(continuationToken)); // Act var moduleTwins = await this.modulesController.GetModuleTwinsAsync(query); // Assert var moduleTwin = moduleTwins.Items[0]; Assert.Equal("d", moduleTwin.DeviceId); Assert.Equal("m", moduleTwin.ModuleId); Assert.Equal(resultToken, moduleTwins.ContinuationToken); Assert.Equal("v2", moduleTwin.Desired["version"]); Assert.Equal("v1", moduleTwin.Reported["version"]); }
private async Task StoreModuleTwinsInStorage(List <TwinServiceModel> moduleTwins, string deploymentId) { if (moduleTwins != null && moduleTwins.Count > 0) { TwinServiceListModel existingModuleTwins = await this.GetDeploymentImapactedModulesAsync(deploymentId); if (existingModuleTwins == null || (existingModuleTwins != null && existingModuleTwins.Items.Count == 0)) { foreach (var moduleTwin in moduleTwins) { await this.SaveModuleTwin(deploymentId, moduleTwin, null); } } else { foreach (var moduleTwin in moduleTwins) { var existingModuleTwin = existingModuleTwins.Items.FirstOrDefault(x => x.ModuleId == moduleTwin.ModuleId && x.DeviceId == moduleTwin.DeviceId); await this.SaveModuleTwin(deploymentId, moduleTwin, existingModuleTwin?.ETag); // archive exisiting Device Twin var archiveModuleTwinValue = JsonConvert.SerializeObject( existingModuleTwin, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, }); await this.client.UpdateAsync(string.Format(DeploymentModuleHistoryPropertiesCollection, deploymentId, Guid.NewGuid().ToString()), $"{moduleTwin.DeviceId}-{this.RemoveSpecialCharacters(moduleTwin.ModuleId)}", archiveModuleTwinValue, null); } } } }
private async Task StoreDevicePropertiesInStorage(List <TwinServiceModel> deviceTwins, string deploymentId) { if (deviceTwins != null) { TwinServiceListModel existingDeviceTwins = await this.GetDeploymentDevicesAsync(deploymentId); if (existingDeviceTwins == null || (existingDeviceTwins != null && existingDeviceTwins.Items.Count == 0)) { foreach (var deviceTwin in deviceTwins) { await this.SaveDeviceTwin(deploymentId, deviceTwin, null); } } else { foreach (var deviceTwin in deviceTwins) { var existingDeviceTwin = existingDeviceTwins.Items.FirstOrDefault(x => x.DeviceId == deviceTwin.DeviceId); await this.SaveDeviceTwin(deploymentId, deviceTwin, existingDeviceTwin?.ETag); // archive exisiting Device Twin var archiveDeviceTwinValue = JsonConvert.SerializeObject( existingDeviceTwin, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, }); await this.client.UpdateAsync(string.Format(DeploymentHistoryPropertiesCollection, deploymentId, Guid.NewGuid().ToString()), deviceTwin.DeviceId, archiveDeviceTwinValue, null); } } } }
public TwinPropertiesListApiModel(TwinServiceListModel twins) { this.Items = new List <TwinPropertiesApiModel>(); this.ContinuationToken = twins.ContinuationToken; foreach (var t in twins.Items) { this.Items.Add(new TwinPropertiesApiModel(t.DesiredProperties, t.ReportedProperties, t.DeviceId, t.ModuleId)); } }
public async Task <TwinServiceListModel> GetModulesListAsync(string deploymentId, string query, bool isLatest) { TwinServiceListModel moduletwins = null; if (!isLatest) { moduletwins = await this.GetDeploymentImapactedModulesAsync(deploymentId); } else { moduletwins = await this.devices.GetModuleTwinsByQueryAsync(query, null); } return(moduletwins); }
private async Task GetModuleTwins(string query, string continuationToken, List <TwinServiceModel> twins) { TwinServiceListModel moduleTwins = null; moduleTwins = await this.devices.GetModuleTwinsByQueryAsync(query, null); if (moduleTwins != null && moduleTwins.Items.Count() > 0) { twins.AddRange(moduleTwins.Items); if (!string.IsNullOrWhiteSpace(moduleTwins.ContinuationToken)) { await this.GetModuleTwins(query, continuationToken, twins); } } }