/// <summary> /// Sets blade state. If state is set to ON, set the blade to on; otherwise, set the blade to off. /// If bladeId is specified, change blade state to that specific blade; otherwise, the change /// will be made to all blades. /// </summary> protected bool SetBladeState(PowerState state, int bladeId = -1, [CallerMemberName] string testName = null) { try { var message = string.Format("Set {0} to {1} state", state, bladeId > 0 ? string.Format("Blade {0}", bladeId) : "all blades"); CmTestLog.Info(string.Concat("Trying to ", message), testName); ChassisResponse response; if (bladeId > 0) { response = state == PowerState.ON ? this.Channel.SetBladeOn(bladeId) : this.Channel.SetBladeOff(bladeId); } else { response = state == PowerState.ON ? this.Channel.SetAllBladesOn() : this.Channel.SetAllBladesOff(); } var result = ChassisManagerTestHelper.AreEqual(CompletionCode.Success, response.completionCode, message, testName); Thread.Sleep(TimeSpan.FromSeconds(CmConstants.BladePowerOnSeconds)); return(result); } catch (Exception e) { CmTestLog.Exception(e, testName); return(false); } }
/// <summary> /// Test Command: ReadChassisLogWithTimestamp. Test case verifies: /// The command returns completion code success for WcsAdmin; /// Bad Request for WcsOperator and WcsUser /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> // [TFS WorkItem:2577] ReadChassisLogWithTimestamp: Verify all users from are able to execute the command public bool ReadChassisLogWithTimestampByAllUsers() { CmTestLog.Start(); bool testPassed = true; // Loop through different user types and ReadChassisLogWithTimestamp foreach (WCSSecurityRole roleId in Enum.GetValues(typeof(WCSSecurityRole))) { ChassisLogResponse chassisLog; // Use different user context this.TestChannelContext = this.ListTestChannelContexts[(int)roleId]; CmTestLog.Info(string.Format("Trying to ReadChassisLogWithTimestamp with user type {0} ", roleId.ToString())); chassisLog = this.TestChannelContext.ReadChassisLogWithTimestamp(DateTime.MinValue, DateTime.Now); if (chassisLog.completionCode != CompletionCode.Success && (roleId == WCSSecurityRole.WcsCmAdmin || roleId == WCSSecurityRole.WcsCmOperator || roleId == WCSSecurityRole.WcsCmUser)) { CmTestLog.Failure(string.Format("Cannot Get Read ChassisLogs WithTimestamp With User {0}", roleId.ToString())); CmTestLog.End(false); return(false); } else { testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, chassisLog.completionCode, "Received ReadChassisLogWithTimestamp for user " + roleId.ToString()); } } CmTestLog.End(testPassed); return(testPassed); }
/// <summary> /// Test Command: ReadChassisLogWithTimestamp. The test case verifies: /// The command returns completion code success; /// Verifies all the entries with in the time stamp /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> public bool ReadChassisLogWithTimestamp() { CmTestLog.Start(); bool testPassed = true; ChassisLogResponse cmLogReponse = null; ChassisLogResponse CMLogReponseWithTime = null; CmTestLog.Info("!!!!!!!!! Starting execution of ReadChassisLogWithTimestampTest !!!!!!!!!"); cmLogReponse = this.Channel.ReadChassisLog(); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, cmLogReponse.completionCode, "Received for read chassis log"); // Make sure log entries should not be more than 50 testPassed &= ChassisManagerTestHelper.IsTrue(cmLogReponse.logEntries.Count <= CmConstants.LogEntries, string.Format("Received {0} log entries", cmLogReponse.logEntries.Count)); DateTime invalidStart = DateTime.Now.AddDays(1); DateTime invalidEnd = DateTime.Now.AddDays(2); CMLogReponseWithTime = this.Channel.ReadChassisLogWithTimestamp(invalidStart, invalidEnd); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, CMLogReponseWithTime.completionCode, "Received success for ReadChassisLogWithTimestamp"); testPassed &= ChassisManagerTestHelper.IsTrue(CMLogReponseWithTime.logEntries.Count == 0, "Received zero entries for invalid timestamp"); //need to clear the chassis log so the response is not too big ChassisResponse response = this.Channel.ClearChassisLog(); //Add couple more calls this.Channel.SetChassisAttentionLEDOn(); this.Channel.SetChassisAttentionLEDOff(); cmLogReponse = this.Channel.ReadChassisLog(); DateTime start = DateTime.Now.AddDays(-1); DateTime end = DateTime.Now.AddDays(1); CMLogReponseWithTime = this.Channel.ReadChassisLogWithTimestamp(start, end); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, CMLogReponseWithTime.completionCode, "Received success for ReadChassisLogWithTimestamp"); testPassed &= ChassisManagerTestHelper.IsTrue(cmLogReponse.logEntries[1].eventTime > start, "Log entires start time"); testPassed &= ChassisManagerTestHelper.IsTrue(cmLogReponse.logEntries[cmLogReponse.logEntries.Count - 1].eventTime < end, "Log entires end time"); int logSize = CMLogReponseWithTime.logEntries.Count; if (!CMLogReponseWithTime.logEntries[logSize - 1].eventDescription.Contains("SetChassisAttentionLEDOn")) { CmTestLog.Failure("!!!Failed to read the CM logs with a time range."); return(false); } //This will require that the CM doesn't receive any other user commands. if (!CMLogReponseWithTime.logEntries[0].eventDescription.Contains("ReadChassisLog")) { CmTestLog.Failure("!!!Failed to read the CM logs with a time range."); return(false); } CmTestLog.End(testPassed); return(testPassed); }
/// <summary> /// Test Command: ClearChassisLog /// Test case verifies: Completion code success /// Verifies Log entries count after clear chassis log and read chassislog /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> public bool ClearChassisLog() { CmTestLog.Start(); bool testPassed = true; ChassisLogResponse cmLogsResponse; ChassisResponse cmResponse; CmTestLog.Info(" !!!!!! Started running of clearchassislogtest !!!!!! "); cmResponse = this.Channel.ClearChassisLog(); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, cmResponse.completionCode, "Received for clear chassis log"); CmTestLog.Info("Verifying log entries after clear the chassis logs"); cmLogsResponse = this.Channel.ReadChassisLog(); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, cmResponse.completionCode, "Received for read chassis log"); testPassed &= ChassisManagerTestHelper.AreEqual(CmConstants.LogCount, cmLogsResponse.logEntries.Count, "Received for log entries count"); CmTestLog.End(testPassed); return(testPassed); }
/// <summary> /// Test Command: ReadBladeLogWithTimestamp. The test case verifies: /// The command returns completion code success; /// The command succeeds even after all logs are cleared. /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> public bool ReadBladeLogWithTimestampTest() { CmTestLog.Start(); // get all server blade locations int[] serverLocations; if (!GetBladeLocations(blade => blade.bladeType.Equals(CmConstants.ServerBladeType), out serverLocations) || serverLocations.Length == 0) { CmTestLog.Failure("Cannot find any server blade"); CmTestLog.End(false); return(false); } // pick up a random server blade var bladeId = serverLocations.RandomOrDefault(); CmTestLog.Info(string.Format("Pick up a random server blade# {0} for test", bladeId)); bool testPassed = true; ChassisResponse response; // read logs from the blade CmTestLog.Info("Trying to read blade log with timestamp from Blade# " + bladeId); response = this.Channel.ReadBladeLogWithTimestamp(bladeId, DateTime.MinValue, DateTime.Now); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, response.completionCode, "Logs read from Blade# " + bladeId); // clear the logs and read again CmTestLog.Info("Trying to clear the logs on Blade# " + bladeId); response = this.Channel.ClearBladeLog(bladeId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, response.completionCode, "Logs cleared on Blade# " + bladeId); CmTestLog.Info("Trying to read logs again from Blade# " + bladeId); response = this.Channel.ReadBladeLogWithTimestamp(bladeId, DateTime.MinValue, DateTime.Now); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, response.completionCode, "Logs read from Blade# " + bladeId); // end of the test CmTestLog.End(testPassed); return(testPassed); }
/// <summary> /// Test Command: ClearChassisLog. Test case verifies: /// The command returns completion code success for WcsAdmin; /// Bad Request for WcsOperator and WcsUser /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> // [TFS WorkItem:2585] ClearChassisLog: Verify ONLY users from WcsCmAdmin are able to execute the command public bool ClearChassisLogByAllUsers() { CmTestLog.Start(); bool testPassed = true; // Loop through different user types and ReadChassisLogWithTimestamp foreach (WCSSecurityRole roleId in Enum.GetValues(typeof(WCSSecurityRole))) { try { // Use different user context this.TestChannelContext = this.ListTestChannelContexts[(int)roleId]; CmTestLog.Info(string.Format("Trying to ClearChassisLog with user type {0} ", roleId.ToString())); ChassisResponse clearChassisLog = this.TestChannelContext.ClearChassisLog(); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, clearChassisLog.completionCode, "Received ClearChassisLog for user " + roleId.ToString()); } catch (Exception ex) { // Check error is due to permission HTTP 400 bad request if (ex.Message.Contains("400") && roleId == WCSSecurityRole.WcsCmUser) { ChassisManagerTestHelper.IsTrue(true, "ClearChassisLog returned Bad Request for user " + roleId.ToString()); } else { ChassisManagerTestHelper.IsTrue(false, "Exception: " + ex.Message); testPassed = false; } } } CmTestLog.End(testPassed); return(testPassed); }
/// <summary> /// Test Command: ReadChassisLog /// The test case verifies: All users can execute command /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> public bool ReadChassisLogTest() { CmTestLog.Start(); bool allPassed = true; string currentApi = "ReadChassisLog"; try { // Verify all users can execute command : WorkItem(2580) bool userPassed; foreach (WCSSecurityRole TestUser in Enum.GetValues(typeof(WCSSecurityRole))) { CmTestLog.Info("Calling " + currentApi + " for user type " + TestUser); userPassed = true; VerifyReadChassisLog(ref userPassed, TestUser); ChassisManagerTestHelper.IsTrue(userPassed, currentApi + ": Command executed for user " + TestUser); allPassed &= userPassed; } ChassisManagerTestHelper.IsTrue(allPassed, currentApi + ": All users can execute the command"); } catch (Exception ex) { ChassisManagerTestHelper.IsTrue(false, ex.Message); ChassisManagerTestHelper.IsTrue(StartStopCmService("start"), currentApi + ": Chassis Manager service started"); allPassed = false; } CmTestLog.End(allPassed); return(allPassed); }
/// <summary> /// Test Command: SetNextBoot, GetNextBoot. The test case verifies: /// The command returns a success completion code on server blades; /// The command works with all blade types (except unknown type); /// When set to non-persistent, the blade will lose its next boot value after restart. /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> public bool SetGetNextBootTest() { CmTestLog.Start(); // get all server blade locations int[] serverLocations; if (!GetBladeLocations(blade => blade.bladeType.Equals(CmConstants.ServerBladeType), out serverLocations) || serverLocations.Length == 0) { CmTestLog.Failure("Cannot find any server blade"); CmTestLog.End(false); return(false); } // pick up a random server blade int bladeId = serverLocations.RandomOrDefault(); CmTestLog.Info(string.Format("Pick up a random server blade# {0} for test", bladeId)); // make sure the blade is powered on if (!SetPowerState(PowerState.ON, bladeId)) { CmTestLog.Failure("Cannot power on Blade# " + bladeId); CmTestLog.End(false); return(false); } bool allPassed = true; foreach (BladeBootType bootType in Enum.GetValues(typeof(BladeBootType))) { if (bootType == BladeBootType.Unknown) { continue; } //// set next boot to persistent CmTestLog.Info(string.Format("Trying to set next boot to Type {0} with persistent", bootType)); BootResponse response = Channel.SetNextBoot(bladeId, bootType, false, true, 0); allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, response.completionCode, "Set persistent boot type"); // get next boot and verify CmTestLog.Info("Trying to get the next boot"); response = Channel.GetNextBoot(bladeId); allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, response.completionCode, "Get next boot value"); allPassed &= ChassisManagerTestHelper.AreEqual(bootType, response.nextBoot, "The boot type matches what it was set to"); //// set to non persistent CmTestLog.Info(string.Format("Trying to set next boot to Type {0} with non-persistent", bootType)); response = Channel.SetNextBoot(bladeId, bootType, false, false, 1); allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, response.completionCode, "Set non-persistent boot type"); // get next boot and verify CmTestLog.Info("Trying to get the next boot"); response = Channel.GetNextBoot(bladeId); allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, response.completionCode, "Get next boot value"); allPassed &= ChassisManagerTestHelper.AreEqual(bootType, response.nextBoot, "The boot type matches what it was set to"); // make sure it loses its value after restart if (!(bootType == BladeBootType.ForcePxe || bootType == BladeBootType.NoOverride)) { CmTestLog.Info("Trying to restart the blade and get next boot value again"); Channel.SetBladeActivePowerCycle(bladeId, 0); Thread.Sleep(TimeSpan.FromMinutes(1)); response = Channel.GetNextBoot(bladeId); allPassed &= ChassisManagerTestHelper.IsTrue(bootType == response.nextBoot, "The blade loses its next boot value after power cycle"); } } // end of the test CmTestLog.End(allPassed); return(allPassed); }
/// <summary> /// Test Command: ReadBladeLog, ClearBladeLog. The test case verifies: /// The command returns completion code success on server blades; /// ReadBladeLog succeeds even after all logs are cleared. /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> public bool ReadClearBladeLogTest() { CmTestLog.Start(); ChassisLogResponse readLogResponse; BladeResponse clearLogResponse; bool testPassed = true; int[] serverLocations, jbodLocations; if (!this.GetBladeLocations(blade => blade.bladeType.Equals(CmConstants.ServerBladeType), out serverLocations) || !this.GetBladeLocations(blade => blade.bladeType.Equals(CmConstants.JbodBladeType), out jbodLocations)) { CmTestLog.Failure("Cannot find a server/ Jbod blade to execute automation against"); CmTestLog.End(false); return(false); } if (serverLocations == null || serverLocations.Length == 0) { CmTestLog.Warning("There are no server blades to execute the test against."); } else { int bladeId = serverLocations.RandomOrDefault(); CmTestLog.Success("Found server blade at location: " + bladeId); CmTestLog.Info("Power on Blade# " + bladeId); var powerOnResponse = this.Channel.SetPowerOn(bladeId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, powerOnResponse.completionCode, string.Format("Blade# {0} is powered on", bladeId)); CmTestLog.Info("Read logs from Blade# " + bladeId); readLogResponse = this.Channel.ReadBladeLog(bladeId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, readLogResponse.completionCode, "Received Read logs from Blade# " + bladeId); CmTestLog.Info("Clear logs on Blade# " + bladeId + " and read again"); clearLogResponse = this.Channel.ClearBladeLog(bladeId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, clearLogResponse.completionCode, "Logs on Blade# " + bladeId + " is cleared"); readLogResponse = this.Channel.ReadBladeLog(bladeId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, readLogResponse.completionCode, "Read logs from Blade# " + bladeId); } // [TFS WorkItem: 2730] ReadBladeLog: Verify command is not valid to run on JBOD blade if (jbodLocations == null || jbodLocations.Length == 0) { CmTestLog.Warning("There are no JBODs to execute the test against."); } else { int JbodId = jbodLocations.RandomOrDefault(); CmTestLog.Success("Found JBOD blade at location " + JbodId); CmTestLog.Info("Power on Blade# " + JbodId); var powerOnResponse = this.Channel.SetPowerOn(JbodId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, powerOnResponse.completionCode, string.Format("JBOD at location# {0} is powered on", JbodId)); CmTestLog.Info("Trying to read logs for JBOD"); readLogResponse = this.Channel.ReadBladeLog(JbodId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.CommandNotValidForBlade, readLogResponse.completionCode, "Received CommandNotValidForBlade to Read logs for JBOD# " + JbodId); // [TFS WorkItem: 2731] ClearBladeLog: Verify command is not valid to run on JBOD blade CmTestLog.Info("Trying to clear logs for JBOD"); clearLogResponse = this.Channel.ClearBladeLog(JbodId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.CommandNotValidForBlade, clearLogResponse.completionCode, "Received CommandNotValidForBlade to clear logs for JBOD# " + JbodId); } this.EmptyLocations = this.GetEmptyLocations(); if (EmptyLocations == null || EmptyLocations.Length == 0) { CmTestLog.Warning("There are no Empty slots to execute the test against."); } else { int slotId = EmptyLocations.RandomOrDefault(); CmTestLog.Success("Found empty slot at location " + slotId); CmTestLog.Info("Trying to read logs for Empty location"); readLogResponse = this.Channel.ReadBladeLog(slotId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Timeout, readLogResponse.completionCode, "Received Timeout to Read logs for emoty slot# " + slotId); // [TFS WorkItem: 2731] ClearBladeLog: Verify command is not valid to run on JBOD blade CmTestLog.Info("Trying to clear logs for empty slot"); clearLogResponse = this.Channel.ClearBladeLog(slotId); testPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Timeout, clearLogResponse.completionCode, "Received Timeout to clear logs for empty slot# " + slotId); } CmTestLog.End(testPassed); return(true); }
private void VerifyReadChassisLog(ref bool chassisPassed, WCSSecurityRole user) { string currentApi = "ReadChassisLog"; string logParentDirectory = @"\\" + defaultCMName + @"\c$\"; string[] userLogPaths = new string[] { null, null }; ChassisLogResponse chassisLog = new ChassisLogResponse(); CmTestLog.Info("TestChannelContext user " + (int)user); this.TestChannelContext = this.ListTestChannelContexts[(int)user]; chassisLog = this.TestChannelContext.ReadChassisLog(); chassisPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, chassisLog.completionCode, currentApi + ": Completion Code success for user " + user.ToString()); if (StartStopCmService("stop")) { CmTestLog.Success(currentApi + ": Stopped Chassis Manager Service"); } else { CmTestLog.Failure(currentApi + ": Unable to stop Chassis Manager Service. Will not check log entry contents"); chassisPassed = false; return; } // Check Log entries are populated in ChassisLogResponse and not greater than 50 entries if (chassisLog.logEntries.Count < 1) { CmTestLog.Failure(currentApi + ": Command does not return Log Entries"); chassisPassed = false; ChassisManagerTestHelper.IsTrue(StartStopCmService("start"), currentApi + ": Stopped Chassis Manager Service"); return; } else if (chassisLog.logEntries.Count > 50) { CmTestLog.Failure(currentApi + ": Command returns more than 50 Log Entries"); chassisPassed = false; ChassisManagerTestHelper.IsTrue(StartStopCmService("start"), currentApi + ": Stopped Chassis Manager Service"); return; } else { CmTestLog.Success(currentApi + ": Command returns between 1 and 50 Log Entries"); } IntPtr token = IntPtr.Zero; // Impersonate remote user bool successLogon = LogonUser(defaultAdminUserName, defaultCMName, defaultAdminPassword, (int)DwLogonType.NewCredentials, (int)DwLogonProvider.WinNT50, ref token); if (successLogon) { using (WindowsImpersonationContext context = WindowsIdentity.Impersonate(token)) { // Verify that User Logs exist to compare log entries with ChassisLogResponse if (!Directory.Exists(logParentDirectory)) { CmTestLog.Failure(currentApi + ": Directory to User Log files does not exist"); chassisPassed = false; ChassisManagerTestHelper.IsTrue(StartStopCmService("start"), currentApi + ": Stopped Chassis Manager Service"); return; } foreach (string filePath in Directory.GetFiles(logParentDirectory)) { Match fileMatch00 = Regex.Match(filePath, @"ChassisManagerUserLog00\.svclog"); Match fileMatch01 = Regex.Match(filePath, @"ChassisManagerUserLog01\.svclog"); if (fileMatch00.Success) { userLogPaths[0] = filePath; } else if (fileMatch01.Success) { userLogPaths[1] = filePath; } } if (userLogPaths[0] == null && userLogPaths[1] == null) { CmTestLog.Failure(currentApi + ": Could not find user logs"); chassisPassed = false; ChassisManagerTestHelper.IsTrue(StartStopCmService("start"), currentApi + ": Started Chassis Manager Service"); return; } // Compare and match log entries in ChassisLogResponse to User Logs in Chassis Manager int entryCount = 0; bool allEntriesPassed = true; foreach (LogEntry entry in chassisLog.logEntries) { if (entry.eventDescription == null && entry.eventTime == null) { CmTestLog.Failure(currentApi + string.Format(": Log Entry {0} returns no data for either eventDescription or eventTime or both", entryCount)); allEntriesPassed = false; entryCount++; continue; } // Find log entry in either UserLog00 or UserLog01 int userLogCount = 0; bool userLogEntryFound = false; string propertyValue; foreach (string userLogPath in userLogPaths) { if (userLogPath == null) { CmTestLog.Info(currentApi + string.Format(": User Log {0} does not exist", userLogCount)); userLogCount++; continue; } XmlReaderSettings xmlSettings = new XmlReaderSettings(); xmlSettings.ConformanceLevel = ConformanceLevel.Fragment; XmlReader userLogReader = XmlReader.Create(userLogPath, xmlSettings); try { while (!userLogEntryFound) { while (userLogReader.Read()) { if (userLogReader.Name == "ApplicationData") { break; } } if (userLogReader.Name != "ApplicationData") { userLogReader.Close(); break; } // Read User Log Entry and condition both strings for comparison propertyValue = userLogReader.ReadElementContentAsString(); propertyValue = propertyValue.Replace(@"\", ""); propertyValue = propertyValue.Replace(@"(", ""); propertyValue = propertyValue.Replace(@")", ""); entry.eventDescription = entry.eventDescription.Replace(@"\", ""); entry.eventDescription = entry.eventDescription.Replace(@"(", ""); entry.eventDescription = entry.eventDescription.Replace(@")", ""); Match eventTimeMatch = Regex.Match(propertyValue, entry.eventTime.ToString("yyyy-MM-dd HH:mm:ss.fff")); Match eventDescriptionMatch = Regex.Match(propertyValue, entry.eventDescription); if (eventTimeMatch.Success && eventDescriptionMatch.Success) { CmTestLog.Success(currentApi + string.Format(": Found eventTime match and eventDescription match for entry {0} in user log {1}", entryCount, userLogCount)); userLogEntryFound = true; } } } catch (Exception exc) { if (exc.Message.Contains(@"Not enough )'s")) { CmTestLog.Info(currentApi + string.Format(": Entry {0} throwing exception 'Not enough )'s' in User Log {1}", entryCount, userLogCount)); userLogCount++; continue; } else { throw new Exception(exc.Message); } } if (!userLogEntryFound) { CmTestLog.Info(currentApi + string.Format(": User Log {0} does not contain entry {1}", userLogCount, entryCount)); userLogReader.Close(); userLogCount++; continue; } userLogReader.Close(); userLogCount++; } if (!userLogEntryFound) { CmTestLog.Failure(currentApi + string.Format(": Entry {0} was not found in either user logs", entryCount)); allEntriesPassed = false; entryCount++; continue; } chassisPassed &= allEntriesPassed; entryCount++; } ChassisManagerTestHelper.IsTrue(allEntriesPassed, currentApi + string.Format(": All Log Entries passed", entryCount)); // Revert back to original user context.Undo(); } } else { CmTestLog.Failure("UserLogon: User failed to be created"); chassisPassed = false; } ChassisManagerTestHelper.IsTrue(StartStopCmService("start"), currentApi + ": Started Chassis Manager Service"); }
/// <summary> /// Test: User Logs /// The test case verifies: /// User Log exists /// </summary> /// <returns>True if all check-points pass; false, otherwise.</returns> public bool UserLogsTest() { CmTestLog.Start(); bool allPassed = true; string currentTest = "UserLogs"; try { string logParentDirectory = @"\\" + defaultCMName + @"\c$\"; bool foundUserLog = false; IntPtr token = IntPtr.Zero; // Impersonate remote user bool successLogon = LogonUser(defaultAdminUserName, defaultCMName, defaultAdminPassword, (int)DwLogonType.NewCredentials, (int)DwLogonProvider.WinNT50, ref token); if (successLogon) { using (WindowsImpersonationContext context = WindowsIdentity.Impersonate(token)) { // Verify presence of User Log : WorkItem(2271) if (!Directory.Exists(logParentDirectory)) { CmTestLog.Failure(currentTest + ": Directory to User Log files does not exist"); return(false); } foreach (string filePath in Directory.GetFiles(logParentDirectory)) { Match fileMatch = Regex.Match(filePath, @"ChassisManagerUserLog0[01]\.svclog"); if (fileMatch.Success) { CmTestLog.Success(currentTest + ": Verified presence of User Log " + filePath); foundUserLog = true; break; } } allPassed &= foundUserLog; // Revert back to original user context.Undo(); } } else { CmTestLog.Failure("UserLogon: User failed to be created"); return(false); } } catch (Exception ex) { ChassisManagerTestHelper.IsTrue(false, "Exception: " + ex.Message); allPassed = false; } CmTestLog.End(allPassed); return(allPassed); }