static async Task StartAsync(INetworkController controller, CancellationToken cancellationToken) { var delay = Settings.Current.StartAfter; INetworkStatusReporter reporter = new NetworkStatusReporter(Settings.Current.TestResultCoordinatorEndpoint, Settings.Current.ModuleId, Settings.Current.TrackingId); foreach (Frequency item in Settings.Current.Frequencies) { Log.LogInformation($"Schedule task for type {controller.NetworkControllerType} to start after {delay} Offline frequency {item.OfflineFrequency} Online frequency {item.OnlineFrequency} Run times {item.RunsCount}"); var taskExecutor = new CountedTaskExecutor( async cs => { await SetNetworkControllerStatus(controller, NetworkControllerStatus.Enabled, reporter, cs); await Task.Delay(item.OfflineFrequency, cs); await SetNetworkControllerStatus(controller, NetworkControllerStatus.Disabled, reporter, cs); }, delay, item.OnlineFrequency, item.RunsCount, Log, "restrict/default"); await taskExecutor.Schedule(cancellationToken); // Only needs to set the start delay for first frequency, after that reset to 0 delay = TimeSpan.FromSeconds(0); } }
static async Task RemoveAllControllingRules(IList <INetworkController> controllerList, CancellationToken cancellationToken) { var reporter = new NetworkStatusReporter(Settings.Current.TestResultCoordinatorEndpoint, Settings.Current.ModuleId, Settings.Current.TrackingId); await reporter.ReportNetworkStatusAsync(NetworkControllerOperation.SettingRule, NetworkControllerStatus.Disabled, NetworkControllerType.All); foreach (var controller in controllerList) { NetworkControllerStatus networkControllerStatus = await controller.GetNetworkControllerStatusAsync(cancellationToken); if (networkControllerStatus != NetworkControllerStatus.Disabled) { Log.LogInformation($"Network restriction is enabled for {controller.NetworkControllerType}. Setting default"); bool online = await controller.SetNetworkControllerStatusAsync(NetworkControllerStatus.Disabled, cancellationToken); online = await CheckSetNetworkControllerStatusAsyncResult(online, NetworkControllerStatus.Disabled, controller, cancellationToken); if (!online) { Log.LogError($"Failed to ensure it starts with default values."); await reporter.ReportNetworkStatusAsync(NetworkControllerOperation.RuleSet, NetworkControllerStatus.Enabled, controller.NetworkControllerType, true); throw new TestInitializationException(); } } } Log.LogInformation($"Network is online"); await reporter.ReportNetworkStatusAsync(NetworkControllerOperation.RuleSet, NetworkControllerStatus.Disabled, NetworkControllerType.All, true); }
private static async Task <MethodResponse> ToggleConnectivity(MethodRequest methodRequest, object userContext) { Log.LogInformation("Direct method toggleConnectivity has been invoked."); (string networkInterfaceName, CancellationToken token) = (Tuple <string, CancellationToken>)userContext; // true for network on (restriction disabled), false for network off (restriction enabled) if (!bool.TryParse(JObject.Parse(methodRequest.DataAsJson)["networkOnValue"].ToString(), out bool networkOnValue)) { throw new ArgumentException($"Unable to parse methodRequest. JsonData: {methodRequest.DataAsJson}"); } Log.LogInformation($"Toggling network {networkInterfaceName} {(networkOnValue ? "on" : "off")}"); INetworkStatusReporter reporter = new NetworkStatusReporter(Settings.Current.TestResultCoordinatorEndpoint, Settings.Current.ModuleId, Settings.Current.TrackingId); NetworkProfileSetting customNetworkProfileSetting = Settings.Current.NetworkRunProfile.ProfileSetting; customNetworkProfileSetting.PackageLoss = 100; var controller = new OfflineController(networkInterfaceName, Settings.Current.IotHubHostname, customNetworkProfileSetting); NetworkControllerStatus networkControllerStatus = networkOnValue ? NetworkControllerStatus.Disabled : NetworkControllerStatus.Enabled; await SetNetworkControllerStatus(controller, networkControllerStatus, reporter, token); return(new MethodResponse((int)HttpStatusCode.OK)); }
static async Task StartAsync(INetworkController controller, CancellationToken cancellationToken) { INetworkStatusReporter reporter = new NetworkStatusReporter(Settings.Current.TestResultCoordinatorEndpoint, Settings.Current.ModuleId, Settings.Current.TrackingId); foreach (Frequency item in Settings.Current.Frequencies) { Log.LogInformation($"Schedule task for type {controller.NetworkControllerType} with enable network control frequency {item.OfflineFrequency}, disable network control frequency {item.OnlineFrequency}, and run times {item.RunsCount}."); var taskExecutor = new CountedTaskExecutor( async cs => { await SetNetworkControllerStatus(controller, NetworkControllerStatus.Enabled, reporter, cs); await Task.Delay(item.OfflineFrequency, cs); await SetNetworkControllerStatus(controller, NetworkControllerStatus.Disabled, reporter, cs); }, TimeSpan.Zero, item.OnlineFrequency, item.RunsCount, Log, "restrict/default"); await taskExecutor.Schedule(cancellationToken); } }