public PluginExecutionResult Execute(PluginExecutionData executionData) { // create activity data IPConfigurationActivityData activityData = executionData.GetMetadata <IPConfigurationActivityData>(); // Check if printer is accessible if (!(NetworkUtil.PingUntilTimeout(IPAddress.Parse(activityData.PrimaryWiredIPv4Address), TimeSpan.FromSeconds(20))) && Utility.IsClientConfiguredWithServerIP(activityData.SecondDhcpServerIPAddress, activityData.LinuxServerIPAddress)) { MessageBox.Show(string.Concat("Printer IP Address is not accessible or Client is not configured with Server IP Address.\n\n", "Make sure you have provided valid Printer IP Address and is accessible.\n", "Check if Client has acquired IPv4 Address from Secondary DHCP Server.\n", "Check if Client has acquired IPv4 Address from Linux Server."), "IP Address Not Accessible", MessageBoxButtons.OK, MessageBoxIcon.Error); return(new PluginExecutionResult(PluginResult.Failed, "Printer IP Address is not accessible or Client is not configured with Server IP Address.")); } // Check if the required services are running on DHCP server if (!IsServicesRunning(activityData.PrimaryDhcpServerIPAddress, activityData.SecondDhcpServerIPAddress)) { return(new PluginExecutionResult(PluginResult.Failed, "Services are not running on DHCP server.")); } // create instance of ews adapter EwsWrapper.Instance().Create(activityData.ProductFamily, activityData.ProductName, activityData.PrimaryWiredIPv4Address, activityData.SitemapsVersion, BrowserModel.Firefox, EwsAdapterType.WebDriverAdapter); EwsWrapper.Instance().Start(); EwsWrapper.Instance().WakeUpPrinter(); EwsWrapper.Instance().SetAdvancedOptions(); IPAddress secondaryAddress = null; if (IPAddress.TryParse(activityData.SecondaryWiredIPv4Address, out secondaryAddress)) { EwsWrapper.Instance().ChangeDeviceAddress(secondaryAddress); EwsWrapper.Instance().SetAdvancedOptions(); } if (IPAddress.TryParse(activityData.WirelessIPv4Address, out secondaryAddress)) { EwsWrapper.Instance().ChangeDeviceAddress(secondaryAddress); EwsWrapper.Instance().SetAdvancedOptions(); } EwsWrapper.Instance().ChangeDeviceAddress(activityData.PrimaryWiredIPv4Address); Printer.Printer printer = PrinterFactory.Create(activityData.ProductFamily, activityData.PrimaryWiredIPv4Address); try { activityData.PrimaryMacAddress = printer.MacAddress.Replace(":", string.Empty); } catch { } if (string.IsNullOrEmpty(activityData.PrimaryMacAddress)) { TraceFactory.Logger.Info("Could not get the mac address for Secondary wired interface."); return(new PluginExecutionResult(PluginResult.Failed, "Could not get the mac address for Secondary wired interface.")); } if (activityData.PrinterInterfaceType == CtcBase.Controls.InterfaceType.Single) { if (IPAddress.TryParse(activityData.SecondaryWiredIPv4Address, out secondaryAddress)) { try { printer = PrinterFactory.Create(activityData.ProductFamily, activityData.SecondaryWiredIPv4Address); activityData.SecondaryMacAddress = printer.MacAddress; } catch { } if (string.IsNullOrEmpty(activityData.SecondaryMacAddress)) { TraceFactory.Logger.Info("Could not get the mac address for Secondary wired interface."); return(new PluginExecutionResult(PluginResult.Failed, "Could not get the mac address for Secondary wired interface.")); } } if (IPAddress.TryParse(activityData.WirelessIPv4Address, out secondaryAddress)) { try { printer = PrinterFactory.Create(activityData.ProductFamily, activityData.WirelessIPv4Address); activityData.WirelessMacAddress = printer.MacAddress; }catch { } if (string.IsNullOrEmpty(activityData.WirelessMacAddress)) { TraceFactory.Logger.Info("Could not get the mac address for Secondary wired interface."); return(new PluginExecutionResult(PluginResult.Failed, "Could not get the mac address for wireless interface.")); } } } DhcpApplicationServiceClient serviceFunction = DhcpApplicationServiceClient.Create(activityData.PrimaryDhcpServerIPAddress); activityData.DHCPScopeIPAddress = serviceFunction.Channel.GetDhcpScopeIP(activityData.PrimaryDhcpServerIPAddress); activityData.ServerDNSPrimaryIPAddress = serviceFunction.Channel.GetPrimaryDnsServer(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.SecondaryDnsIPAddress = serviceFunction.Channel.GetSecondaryDnsServer(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.ServerHostName = serviceFunction.Channel.GetHostName(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.DomainName = serviceFunction.Channel.GetDomainName(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.ServerRouterIPAddress = serviceFunction.Channel.GetRouterAddress(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.ServerDNSSuffix = serviceFunction.Channel.GetDnsSuffix(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); string ipv6Scope = serviceFunction.Channel.GetIPv6Scope(activityData.PrimaryDhcpServerIPAddress); if (string.IsNullOrEmpty(ipv6Scope)) { MessageBox.Show(string.Concat("Unable to fetch IPv6 Scope \n\n", "Check whether DHCP IPv6 Scope is configured on DHCP server."), "IPv6 Scope Not found", MessageBoxButtons.OK, MessageBoxIcon.Error); return(new PluginExecutionResult(PluginResult.Failed, "Check whether DHCP IPv6 Scope is configured on DHCP server.")); } activityData.DHCPScopeIPv6Address = serviceFunction.Channel.GetIPv6Scope(activityData.PrimaryDhcpServerIPAddress); // Fetch the VLAN details. GetVlanDetails(ref activityData); // Check if Switch VLAN details are fetched if (3 != activityData.VirtualLanDetails.Count) { MessageBox.Show(string.Concat("Unable to fetch Switch VLAN details\n\n", "Check whether Printer is connected to Network Switch.\n", "Switch should be configured with 3 network virtual LAN."), "Network switch not found", MessageBoxButtons.OK, MessageBoxIcon.Error); return(new PluginExecutionResult(PluginResult.Failed, "Unable to fetch Switch VLAN details. Check whether Printer is connected to Network Switch. Switch should be configured with 3 network virtual LAN.")); } // Router Details: Address, Id, IPv6 Addresses IRouter router = null; activityData.RouterAddress = ROUTER_IP_FORMAT.FormatWith(activityData.PrimaryWiredIPv4Address.Substring(0, activityData.PrimaryWiredIPv4Address.LastIndexOf(".", StringComparison.CurrentCultureIgnoreCase))); router = RouterFactory.Create(IPAddress.Parse(activityData.RouterAddress), ROUTER_USERNAME, ROUTER_PASSWORD); Dictionary <int, IPAddress> routerVlans = router.GetAvailableVirtualLans(); activityData.RouterVlanId = routerVlans.Where(x => (null != x.Value) && (x.Value.IsInSameSubnet(IPAddress.Parse(activityData.RouterAddress)))).FirstOrDefault().Key; RouterVirtualLAN routerVlan = router.GetVirtualLanDetails(activityData.RouterVlanId); Collection <IPAddress> routerIPv6Addresses = router.GetIPv6Addresses(routerVlan.IPv6Details); activityData.RouterIPv6Addresses = new Collection <string>(routerIPv6Addresses.Select(x => x.ToString()).ToList()); // Add source IP Address Utility.AddSourceIPAddress(activityData.PrimaryDhcpServerIPAddress, activityData.LinuxServerIPAddress); //create instance of SNMP wrapper SnmpWrapper.Instance().Create(activityData.PrimaryWiredIPv4Address); //create instance of Telnet wrapper TelnetWrapper.Instance().Create(activityData.PrimaryWiredIPv4Address); if (!ManageReservation(activityData)) { return(new PluginExecutionResult(PluginResult.Failed, "Printer IP Address Reservation in DHCP Server for both DHCP and BOOTP: Failed")); } TraceFactory.Logger.Info("The Server Configured Value retrieved from the DHCP Server are as follows:"); TraceFactory.Logger.Info("MacAddress:{0}, DNSPrimaryIP:{1}, HostName:{2}, RouterIP:{3}, DNSSuffix:{4}".FormatWith(activityData.PrimaryMacAddress, activityData.ServerDNSPrimaryIPAddress, activityData.ServerHostName, activityData.ServerRouterIPAddress, activityData.ServerDNSSuffix)); // assign the session id to activity id activityData.SessionId = executionData.SessionId; if (null == _ipConfigTests) { _ipConfigTests = new IPConfigurationTests(activityData); } foreach (int testNumber in activityData.SelectedTests) { try { ApplicationFlowControl.Instance.CheckWait(LogPauseState, LogResumeState); _ipConfigTests.RunTest(executionData, testNumber, activityData.PrimaryWiredIPv4Address, (ProductFamilies)Enum.Parse(typeof(ProductFamilies), activityData.ProductFamily)); } catch (Exception generalException) { TraceFactory.Logger.Info("Test {0} failed with error: {1}".FormatWith(testNumber, generalException.Message)); } } EwsWrapper.Instance().Stop(); return(new PluginExecutionResult(PluginResult.Passed)); }
public PluginExecutionResult Execute(PluginExecutionData executionData) { CtcSettings.Initialize(executionData); // Create Activity Data IPConfigurationActivityData activityData = executionData.GetMetadata <IPConfigurationActivityData>(CtcMetadataConverter.Converters); // Check Printer Accessibility if (!(NetworkUtil.PingUntilTimeout(IPAddress.Parse(activityData.WiredIPv4Address), TimeSpan.FromSeconds(20))) && CtcUtility.IsClientConfiguredWithServerIP(activityData.SecondDhcpServerIPAddress, activityData.LinuxServerIPAddress)) { MessageBox.Show(string.Concat("Printer IP Address is not accessible or Client is not configured with Server IP Address.\n\n", "Make sure you have provided valid Printer IP Address and is accessible.\n", "Check if Client has acquired IPv4 Address from Secondary DHCP Server.\n", "Check if Client has acquired IPv4 Address from Linux Server."), @"IP Address Not Accessible", MessageBoxButtons.OK, MessageBoxIcon.Error); return(new PluginExecutionResult(PluginResult.Failed, "Printer IP Address is not accessible or Client is not configured with Server IP Address.")); } // Check Services on DHCP Servers if (!IsServicesRunning(activityData.PrimaryDhcpServerIPAddress, activityData.SecondDhcpServerIPAddress)) { return(new PluginExecutionResult(PluginResult.Failed, "Services are not running on DHCP server.")); } // Server Configurations Printer.Printer printer = PrinterFactory.Create(activityData.ProductFamily, activityData.WiredIPv4Address); TraceFactory.Logger.Info("Printer : {0}".FormatWith(printer)); TraceFactory.Logger.Info("printer.MacAddress :{0}".FormatWith(printer.MacAddress)); activityData.PrinterMacAddress = printer.MacAddress.Replace(":", string.Empty); TraceFactory.Logger.Info("PrinterMacAddress : {0}".FormatWith(activityData.PrinterMacAddress)); DhcpApplicationServiceClient serviceFunctionPrimaryServer = DhcpApplicationServiceClient.Create(activityData.PrimaryDhcpServerIPAddress); activityData.PrimaryDHCPServerIPv6Address = serviceFunctionPrimaryServer.Channel.GetIPv6Address(); activityData.DHCPScopeIPAddress = serviceFunctionPrimaryServer.Channel.GetDhcpScopeIP(activityData.PrimaryDhcpServerIPAddress); activityData.DHCPScopeIPv6Address = serviceFunctionPrimaryServer.Channel.GetIPv6Scope(activityData.PrimaryDhcpServerIPAddress); DhcpApplicationServiceClient serviceFunctionSecondaryServer = DhcpApplicationServiceClient.Create(activityData.SecondDhcpServerIPAddress); activityData.SecondaryDHCPServerIPv6Address = serviceFunctionSecondaryServer.Channel.GetIPv6Address(); activityData.SecondaryDHCPServerIPv4Scope = serviceFunctionSecondaryServer.Channel.GetDhcpScopeIP(activityData.SecondDhcpServerIPAddress); activityData.SecondaryDHCPServerIPv6Scope = serviceFunctionSecondaryServer.Channel.GetIPv6Scope(activityData.SecondDhcpServerIPAddress); ServerConfiguration(ref activityData); DhcpApplicationServiceClient serviceFunction = DhcpApplicationServiceClient.Create(activityData.PrimaryDhcpServerIPAddress); activityData.ServerDNSPrimaryIPAddress = serviceFunction.Channel.GetPrimaryDnsServer(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.SecondaryDnsIPAddress = serviceFunction.Channel.GetSecondaryDnsServer(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.ServerHostName = serviceFunction.Channel.GetHostName(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.DomainName = serviceFunction.Channel.GetDomainName(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.ServerRouterIPAddress = serviceFunction.Channel.GetRouterAddress(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); activityData.ServerDNSSuffix = serviceFunction.Channel.GetDnsSuffix(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress); string ipv6Scope = serviceFunction.Channel.GetIPv6Scope(activityData.PrimaryDhcpServerIPAddress); if (string.IsNullOrEmpty(ipv6Scope)) { MessageBox.Show(string.Concat("Unable to fetch IPv6 Scope \n\n", "Check whether DHCP IPv6 Scope is configured on DHCP server."), @"IPv6 Scope Not found", MessageBoxButtons.OK, MessageBoxIcon.Error); return(new PluginExecutionResult(PluginResult.Failed, "Check whether DHCP IPv6 Scope is configured on DHCP server.")); } activityData.DHCPScopeIPv6Address = serviceFunction.Channel.GetIPv6Scope(activityData.PrimaryDhcpServerIPAddress); // Fetch and Validate the Switch VLAN details. GetVlanDetails(ref activityData); if (3 != activityData.VirtualLanDetails.Count) { MessageBox.Show(string.Concat("Unable to fetch Switch VLAN details\n\n", "Check whether Printer is connected to Network Switch.\n", "Switch should be configured with 3 network virtual LAN."), @"Network switch not found", MessageBoxButtons.OK, MessageBoxIcon.Error); return(new PluginExecutionResult(PluginResult.Failed, "Unable to fetch Switch VLAN details. Check whether Printer is connected to Network Switch. Switch should be configured with 3 network virtual LAN.")); } // Fetching Router Details activityData.RouterIPv4Address = ROUTER_IP_FORMAT.FormatWith(activityData.WiredIPv4Address.Substring(0, activityData.WiredIPv4Address.LastIndexOf(".", StringComparison.CurrentCultureIgnoreCase))); var router = RouterFactory.Create(IPAddress.Parse(activityData.RouterIPv4Address), ROUTER_USERNAME, ROUTER_PASSWORD); Dictionary <int, IPAddress> routerVlans = router.GetAvailableVirtualLans(); activityData.RouterVirtualLanId = routerVlans.FirstOrDefault(x => (null != x.Value) && (x.Value.IsInSameSubnet(IPAddress.Parse(activityData.RouterIPv4Address)))).Key; RouterVirtualLAN routerVlan = router.GetVirtualLanDetails(activityData.RouterVirtualLanId); Collection <IPAddress> routerIPv6Addresses = router.GetIPv6Addresses(routerVlan.IPv6Details); activityData.RouterIPv6Addresses = new Collection <string>(routerIPv6Addresses.Select(x => x.ToString()).ToList()); // Add Source IP Address CtcUtility.AddSourceIPAddress(activityData.PrimaryDhcpServerIPAddress, activityData.LinuxServerIPAddress); // Create Instance of EWS Wrapper PrinterFamilies family = (PrinterFamilies)Enum.Parse(typeof(PrinterFamilies), activityData.ProductFamily); EwsWrapper.Instance().Create(family, activityData.ProductName, activityData.WiredIPv4Address, Path.Combine(activityData.SitemapPath, activityData.SitemapsVersion), BrowserModel.Firefox); EwsWrapper.Instance().Start(); EwsWrapper.Instance().WakeUpPrinter(); EwsWrapper.Instance().SetAdvancedOptions(); EwsWrapper.Instance().SetDefaultIPType(DefaultIPType.AutoIP); EwsWrapper.Instance().EnableSnmpv1v2ReadWriteAccess(); // Create Instance of Telnet Wrapper TelnetWrapper.Instance().Create(activityData.WiredIPv4Address); // Create Instance of SNMP Wrapper SnmpWrapper.Instance().Create(activityData.WiredIPv4Address); // Delete Reservation is not validated to handle cases where reservation is not present serviceFunction.Channel.DeleteReservation(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress, activityData.WiredIPv4Address, activityData.PrinterMacAddress); if (serviceFunction.Channel.CreateReservation(activityData.PrimaryDhcpServerIPAddress, activityData.DHCPScopeIPAddress, activityData.WiredIPv4Address, activityData.PrinterMacAddress, ReservationType.Both)) { TraceFactory.Logger.Info("Printer IP Address Reservation in DHCP Server for both DHCP and BOOTP: Succeeded"); } else { TraceFactory.Logger.Info("Printer IP Address Reservation in DHCP Server for both DHCP and BOOTP: Failed"); return(new PluginExecutionResult(PluginResult.Failed, "Printer IP Address Reservation in DHCP Server for both DHCP and BOOTP: Failed")); } TraceFactory.Logger.Info("The Server Configured Value retrieved from the DHCP Server are as follows:"); TraceFactory.Logger.Info("MacAddress:{0}, DNSPrimaryIP:{1}, HostName:{2}, RouterIP:{3}, DNSSuffix:{4}".FormatWith(activityData.PrinterMacAddress, activityData.ServerDNSPrimaryIPAddress, activityData.ServerHostName, activityData.ServerRouterIPAddress, activityData.ServerDNSSuffix)); // assign the session id to activity id activityData.SessionId = executionData.SessionId; if (null == _ipConfigTests) { _ipConfigTests = new IPConfigurationTests(activityData); } foreach (int testNumber in activityData.SelectedTests) { try { ExecutionServices.SessionRuntime.AsInternal().WaitIfPaused(); _ipConfigTests.RunTest(executionData, testNumber, IPAddress.Parse(activityData.WiredIPv4Address), (ProductFamilies)Enum.Parse(typeof(ProductFamilies), activityData.ProductFamily)); } catch (Exception generalException) { TraceFactory.Logger.Info("Test {0} failed with error: {1}".FormatWith(testNumber, generalException.Message)); } } EwsWrapper.Instance().Stop(); return(new PluginExecutionResult(PluginResult.Passed)); }