private void InitializeConfigurationControl() { // Datagridview _gFriendFiles = new BindingList <GFriendFile>(_data.GFriendFiles); scripts_DataGridView.DataSource = _gFriendFiles; scripts_DataGridView.Columns[0].Width = 200; scripts_DataGridView.Columns[1].Width = 100; scripts_DataGridView.Columns[2].Width = 460; // Field Validator fieldValidator.RequireCustom(assetSelectionControl, ValidateAsset); fieldValidator.RequireCustom(scripts_DataGridView, ValidateFiles); // Lock Timeout lockTimeoutControl.Initialize(_data.LockTimeouts); // GFriend Initialize if (!_libraryWritten) { string gfLibraryPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "GFriend", "libs"); GFriendPreparationManager.PrepareLibrary(gfLibraryPath); LibraryUtils.LibraryPath = gfLibraryPath; _libraryWritten = true; } }
/// <summary> /// Run GFriend Script /// </summary> /// <param name="executionData">Execution data</param> /// <param name="gfScriptPath">Path of GFriend Script to run</param> /// <param name="device">Device info</param> /// <returns></returns> private PluginExecutionResult RunGFriendScript(PluginExecutionData executionData, string gfScriptPath, IDeviceInfo device) { _workflowLogger.RecordEvent(DeviceWorkflowMarker.ActivityBegin); string gfLibraryPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "GFriend", "libs"); string outputPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "GFriend_Output", executionData.SessionId, executionData.ActivityExecutionId.ToString()); // Prepare GF Native Libraries and Add event handler // Developer Note : // GFriend dynamically load native libraries (GFK.*.dll files) when execution. // For exeucting GFriend script path of library files should be given. // In this step plugin unzip the embeded archive which contains GFriend native library to Plugin\GFriend\libs if (!_isGFPrepared) { UpdateStatus("Preparing GF libraries"); GFEvent.OnGFEvent += GFEvent_OnGFEvent; GFriendPreparationManager.PrepareLibrary(gfLibraryPath); LibraryUtils.LibraryPath = gfLibraryPath; _isGFPrepared = true; } TestDataManager testDataManager = new TestDataManager(); List <DeviceUnderTest> gfDevices = new List <DeviceUnderTest>(); if (device != null) { DeviceUnderTest dut = new DeviceUnderTest() { DeviceId = device.AssetId, DeviceAddress = device.Address, LanDebugAddress = device.Address2, AdminPassword = device.AdminPassword }; gfDevices.Add(dut); } UpdateStatus("GFrined Initialization"); Runner.InitGFRunner(gfDevices, outputPath); UpdateStatus("Running GFriend Script"); Runner.Run(gfScriptPath, out testDataManager, null, gfLibraryPath); // Check Result with output.xml string outputXMLPath = Path.Combine(outputPath, "output.xml"); XmlDocument outputXML = new XmlDocument(); outputXML.Load(outputXMLPath); XmlNode testSuite = outputXML.SelectSingleNode("//TestSuite"); int passCount = testSuite.SelectNodes("//TestCase/Result[contains(text(),'PASS')]")?.Count ?? 0; int failCount = testSuite.SelectNodes("//TestCase/Result[contains(text(),'FAIL')]")?.Count ?? 0; int errorCount = testSuite.SelectNodes("//TestCase/Result[contains(text(),'ERROR')]")?.Count ?? 0; _workflowLogger.RecordEvent(DeviceWorkflowMarker.ActivityEnd); if (errorCount > 0) { return(new PluginExecutionResult(PluginResult.Error, $"GFriend Execution Ended with Pass:{passCount}, Fail:{failCount}, Error:{errorCount}")); } if (failCount > 0) { return(new PluginExecutionResult(PluginResult.Failed, $"GFriend Execution Ended with Pass:{passCount}, Fail:{failCount}, Error:{errorCount}")); } return(new PluginExecutionResult(PluginResult.Passed)); }