/// <summary> /// command specific implementation /// </summary> internal override void commandImplementation() { BladeMultiRecordResponse myResponse = new BladeMultiRecordResponse(); try { dynamic bladeId = null; dynamic payload = null; if (!(this.argVal.ContainsKey('i'))) { Console.WriteLine(WcsCliConstants.commandFailure + " No blade ID specified, please look at command help"); return; } else { this.argVal.TryGetValue('i', out bladeId); } if (!(this.argVal.ContainsKey('p'))) { Console.WriteLine(WcsCliConstants.commandFailure + " No record data specified, please look at command help"); return; } else { this.argVal.TryGetValue('p', out payload); } myResponse = WcsCli2CmConnectionManager.channel.SetBladeAssetInfo( (int)bladeId, (string)payload); } catch (Exception ex) { SharedFunc.ExceptionOutput(ex); return; } ResponseValidation.ValidateResponse("Blade's FRU has been written successfully", myResponse, true); }
/// <summary> /// Set the Multi Record Area portion of Blade FRU from user provided data /// </summary> /// <param name="bladeId"></param> /// <param name="recordData"></param> /// <returns>MultiRecordResponse</returns> public BladeMultiRecordResponse SetBladeAssetInfo(int bladeId, string recordData) { BladeMultiRecordResponse setBladeAsset = new BladeMultiRecordResponse(); Tracer.WriteInfo("Invoked SetBladeAssetInfo() for blade Id {0}", bladeId); Contracts.ChassisResponse varResponse = ValidateRequest("SetBladeAssetInfo", bladeId); setBladeAsset.bladeNumber = bladeId; setBladeAsset.statusDescription = String.Empty; setBladeAsset.completionCode = Contracts.CompletionCode.Unknown; if (varResponse.completionCode != Contracts.CompletionCode.Success) { setBladeAsset.completionCode = varResponse.completionCode; setBladeAsset.statusDescription = varResponse.statusDescription; return setBladeAsset; } // Write to Blade Multi Record Area of FRU MultiRecordResponse status = WriteMultiRecordFru(bladeId, recordData, DeviceType.Server); if (status.completionCode == (byte)Contracts.CompletionCode.Success) { setBladeAsset.completionCode = Contracts.CompletionCode.Success; } else { setBladeAsset.completionCode = status.completionCode; setBladeAsset.statusDescription = status.statusDescription; } return setBladeAsset; }
private void VerifyBladeFruWritesRemaining(ref bool allPassed, int BladeId) { bool testPassed; string currentApi = "SetBladeAssetInfo"; BladeMultiRecordResponse bladeAssetInfoResponse = new BladeMultiRecordResponse(); // Initialize FRU Writes Remaining Dictionary KeyValue Pair Dictionary <string, string> fruWritesRemainingKeyValue = new Dictionary<string,string> { {"ResetMultiRecordFruWritesRemaining", "0"} }; // Set Channel for WcsCmAdmin User this.TestChannelContext = this.ListTestChannelContexts[(int)WCSSecurityRole.WcsCmAdmin]; if (!ConfigureAppConfig(fruWritesRemainingKeyValue, false)) { CmTestLog.Failure(string.Format("{0}: Setting App.Config failed for KeyValue '{1},{2}'", currentApi, fruWritesRemainingKeyValue.Keys.First(), fruWritesRemainingKeyValue.Values.First())); allPassed = false; return; } // Restart CM Service if (!RestartCmService(currentApi)) { allPassed = false; return; } // Fail FRU Writes Remaining before starting test int writeCount = 0; while (bladeAssetInfoResponse.completionCode != CompletionCode.WriteFruZeroWritesRemaining && writeCount < (AssetManagementConstants.fruWritesRemaining + 1)) { bladeAssetInfoResponse = this.TestChannelContext.SetBladeAssetInfo(BladeId, string.Empty); if ((bladeAssetInfoResponse.completionCode != CompletionCode.Success) && (bladeAssetInfoResponse.completionCode != CompletionCode.WriteFruZeroWritesRemaining)) { CmTestLog.Failure(string.Format("{0}: Command returned Completion Code {1} while trying to return {2} for blade {3}", currentApi, Enum.GetName(typeof(CompletionCode), bladeAssetInfoResponse.completionCode), "WriteFruZeroWritesRemaining", BladeId)); allPassed = false; return; } writeCount++; } if (bladeAssetInfoResponse.completionCode != CompletionCode.WriteFruZeroWritesRemaining) { CmTestLog.Failure(string.Format("{0}: Command returned Completion Code {1} while trying to return {2} for blade {3}", currentApi, Enum.GetName(typeof(CompletionCode), bladeAssetInfoResponse.completionCode), "WriteFruZeroWritesRemaining", BladeId)); allPassed = false; return; } CmTestLog.Info(string.Format("{0}: FRU Writes Remaining set to 0 for blade {1}", currentApi, BladeId)); // Restore App.Config with Original Values if (!ConfigureAppConfig(fruWritesRemainingKeyValue, true)) { CmTestLog.Failure(string.Format("{0}: App.Config cleanup failed", currentApi)); allPassed = false; return; } // Restart CM Service if (!RestartCmService(currentApi)) { allPassed = false; return; } // Verify SetBladeAssetInfo resets number of writes to default value after configuring App.Config : WorkItem(10174) // Set App.Config key "ResetMultiRecordFruWritesRemaining" to value "1" fruWritesRemainingKeyValue["ResetMultiRecordFruWritesRemaining"] = "1"; if (!ConfigureAppConfig(fruWritesRemainingKeyValue, false)) { CmTestLog.Failure(string.Format("{0}: Setting App.Config failed for KeyValue '{1},{2}'", currentApi, fruWritesRemainingKeyValue.Keys.First(), fruWritesRemainingKeyValue.Values.First())); allPassed = false; return; } // Restart CM Service if (!RestartCmService(currentApi)) { allPassed = false; return; } bladeAssetInfoResponse = this.TestChannelContext.SetBladeAssetInfo(BladeId, string.Empty); testPassed = ChassisManagerTestHelper.AreEqual(CompletionCode.Success, bladeAssetInfoResponse.completionCode, string.Format("{0}: Command resets number of writes to default value for blade {1}", currentApi, BladeId)); allPassed &= testPassed; // Restore App.Config with Original Values if (!ConfigureAppConfig(fruWritesRemainingKeyValue, true)) { CmTestLog.Failure(string.Format("{0}: App.Config cleanup failed", currentApi)); allPassed = false; return; } if (!allPassed) { RestartCmService(currentApi); return; } // Starting test: SetBladeAssetInfo fails for attempting to set payload with 0 writes remaining // Set App.Config key "ResetMultiRecordFruWritesRemaining" to value "0" fruWritesRemainingKeyValue["ResetMultiRecordFruWritesRemaining"] = "0"; if (!ConfigureAppConfig(fruWritesRemainingKeyValue, false)) { CmTestLog.Failure(string.Format("{0}: Setting App.Config failed for KeyValue '{1},{2}'", currentApi, fruWritesRemainingKeyValue.Keys.First(), fruWritesRemainingKeyValue.Values.First())); allPassed = false; return; } // Restart CM Service if (!RestartCmService(currentApi)) { allPassed = false; return; } // Verify SetBladeAssetInfo should return WritFruZeroWritesRemaining after 256 iterations : WorkItem(4712) for (int callApiCount = 0; callApiCount < 255; callApiCount++) { bladeAssetInfoResponse = this.TestChannelContext.SetBladeAssetInfo(BladeId, string.Empty); if (bladeAssetInfoResponse.completionCode != CompletionCode.Success) { CmTestLog.Failure(string.Format("{0}: Command returns Completion Code {1} on callApiCount {2} for blade {3} before {4}", currentApi, Enum.GetName(typeof(CompletionCode), bladeAssetInfoResponse.completionCode), callApiCount, BladeId, "WriteFruZeroWritesRemaining")); allPassed = false; return; } } bladeAssetInfoResponse = this.TestChannelContext.SetBladeAssetInfo(BladeId, string.Empty); testPassed = ChassisManagerTestHelper.AreEqual(CompletionCode.WriteFruZeroWritesRemaining, bladeAssetInfoResponse.completionCode, string.Format("{0}: Command returns Completion Code {1} after 256 calls for blade {2}", currentApi, "WriteFruZeroWritesRemaining", BladeId)); allPassed &= testPassed; // Restore App.Config with Original Values if (!ConfigureAppConfig(fruWritesRemainingKeyValue, true)) { CmTestLog.Failure(string.Format("{0}: App.Config cleanup failed", currentApi)); allPassed = false; return; } // Set App.Config key "ResetMultiRecordFruWritesRemaining" to value "1" fruWritesRemainingKeyValue["ResetMultiRecordFruWritesRemaining"] = "1"; if (!ConfigureAppConfig(fruWritesRemainingKeyValue, false)) { CmTestLog.Failure(string.Format("{0}: Setting App.Config failed for KeyValue '{1},{2}'", currentApi, fruWritesRemainingKeyValue.Keys.First(), fruWritesRemainingKeyValue.Values.First())); allPassed = false; return; } // Restart CM Service if (!RestartCmService(currentApi)) { allPassed = false; return; } bladeAssetInfoResponse = this.TestChannelContext.SetBladeAssetInfo(BladeId, string.Empty); allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, bladeAssetInfoResponse.completionCode, string.Format("{0}: FRU Writes Remaining reset for blade {1}", currentApi, BladeId)); // Restore App.Config with Original Values if (!ConfigureAppConfig(fruWritesRemainingKeyValue, true)) { CmTestLog.Failure(string.Format("{0}: App.Config cleanup failed", currentApi)); allPassed = false; return; } // Restart CM Service if (!RestartCmService(currentApi)) { allPassed = false; } return; }