private void VerifyBladeAssetInfo(ref bool bladePassed, int bladeId, int user, string payload) { bool isTrue; int maxStringLength = 56; string propertyValue; BladeAssetInfoResponse bladeAssetInfo = new BladeAssetInfoResponse(); this.TestChannelContext = this.ListTestChannelContexts[user]; bladeAssetInfo = this.TestChannelContext.GetBladeAssetInfo(bladeId); // get completion code success bladePassed = ChassisManagerTestHelper.AreEqual(CompletionCode.Success, bladeAssetInfo.completionCode, string.Format("GetBladeAssetInfo: Completion Code Success for bladeId {0}", bladeId.ToString())); if (bladePassed) { // Get Blade Fru XML Sample string fruDefFileDir = Path.Combine(Directory.GetCurrentDirectory(), "TestData"); string fruFileName = Path.Combine(fruDefFileDir, "BladeFruSample.xml"); if (!File.Exists(fruFileName)) { throw new ApplicationException(string.Format("GetBladeAssetInfo: Sample Xml file is NOT found under the path {0}", fruDefFileDir)); } // Extract BladeFruSample Xml file XmlReader bladeFruXml = XmlReader.Create(fruFileName); bladePassed &= ChassisManagerTestHelper.AreEqual(bladeId, bladeAssetInfo.bladeNumber, string.Format("GetBladeAssetInfo: Received Blade Number for bladeId {0}", bladeId)); bladeFruXml.ReadToFollowing("chassisAreaPartNumber"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.chassisAreaPartNumber, string.Format("GetBladeAssetInfo: Received Chassis Area Part Number for blade {0}", bladeId)); isTrue = bladeAssetInfo.chassisAreaSerialNumber.Length <= 16; bladePassed &= ChassisManagerTestHelper.IsTrue(isTrue, string.Format("GetBladeAssetInfo: Received Chassis Area Serial Number for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("boardAreaManufacturerName"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.boardAreaManufacturerName, string.Format("GetBladeAssetInfo: Received Board Area Manufacturer Name for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("boardAreaManufacturerDate"); propertyValue = bladeFruXml.ReadElementContentAsString(); Match propertyMatch = Regex.Match(propertyValue, @"0[1-9]|[1-12]/0[0-9]|[0-31]/[1-2][09][01789]\d\s\d?\d:\d?\d:\d?\d\s[aApP][mM]"); bladePassed &= ChassisManagerTestHelper.IsTrue(propertyMatch.Success, string.Format("GetBladeAssetInfo: Received Board Area Manufacturer Date for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("boardAreaProductName"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.boardAreaProductName, string.Format("BladeAssetInfo: Received Board Area Product Name for blade {0}", bladeId)); isTrue = bladeAssetInfo.boardAreaSerialNumber.Length <= 16; bladePassed &= ChassisManagerTestHelper.IsTrue(isTrue, string.Format("GetBladeAssetInfo: Received Board Area Serial Number for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("boardAreaPartNumber"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.boardAreaPartNumber, string.Format("GetBladeAssetInfo: Received Board Area Part Number for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("productAreaManufactureName"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.productAreaManufactureName, string.Format("GetBladeAssetInfo: Received Product Area Manufacture Name for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("productAreaProductName"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.productAreaProductName, string.Format("GetBladeAssetInfo: Received Product Area Product Name for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("productAreaPartModelNumber"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.productAreaPartModelNumber, string.Format("GetBladeAssetInfo: Received Product Area Part Model Number for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("productAreaProductVersion"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.productAreaProductVersion, string.Format("GetBladeAssetInfo: Received Product Area Product Version for blade {0}", bladeId)); isTrue = bladeAssetInfo.productAreaSerialNumber.Length <= 16; bladePassed &= ChassisManagerTestHelper.IsTrue(isTrue, string.Format("GetBladeAssetInfo: Received Product Area Serial Number for blade {0}", bladeId)); isTrue = bladeAssetInfo.productAreaAssetTag.Length <= 10; bladePassed &= ChassisManagerTestHelper.IsTrue(isTrue, string.Format("GetBladeAssetInfo: Received Product Area Asset Tag for blade {0}", bladeId)); bladeFruXml.ReadToFollowing("manufacturer"); propertyValue = bladeFruXml.ReadElementContentAsString(); bladePassed &= ChassisManagerTestHelper.AreEqual(propertyValue, bladeAssetInfo.manufacturer, string.Format("GetBladeAssetInfo: Received Manufacturer for blade {0}", bladeId)); // Verify multirecord fields are set if (payload != null) { string[] payLoadFields = payload.Split(',').Select(field => field.Trim()).ToArray(); int fieldCount = 0; string expectedField = null; // Verify payLoad matches MultiRecordFields (only first two fields allowed) if (bladeAssetInfo.multiRecordFields.Count() <= 2) { foreach (string actualField in bladeAssetInfo.multiRecordFields) { if (payLoadFields[fieldCount].Length > 56) { expectedField = payLoadFields[fieldCount].Substring(0, maxStringLength); } else { expectedField = payLoadFields[fieldCount]; } bladePassed &= ChassisManagerTestHelper.AreEqual(expectedField, actualField, string.Format("GetBladeAssetInfo: Received Field{0} '{1}'", fieldCount.ToString(), payLoadFields[fieldCount])); fieldCount++; } } else { CmTestLog.Failure("GetBladeAssetInfo: Command exceeded number of MultiRecord Fields allowed"); } } // Close Xml Reader bladeFruXml.Close(); } }
/// <summary> /// Gets the Blade FRU areas information. The FRU area consists of 3 parts: /// (i) Chassis Info Area; (ii) Board Info Area; and (iii) Product Info Area. /// </summary> /// <returns>AssetInfoResponse</returns> public BladeAssetInfoResponse GetBladeAssetInfo(int bladeId) { Tracer.WriteInfo("Invoked GetBladeAssetInfo() for blade Id {0}", bladeId); BladeAssetInfoResponse assetInfo = new BladeAssetInfoResponse(); try { assetInfo.bladeNumber = bladeId; assetInfo.statusDescription = String.Empty; assetInfo.completionCode = Contracts.CompletionCode.Unknown; Contracts.ChassisResponse varResponse = ValidateRequest("GetBladeAssetInfo", bladeId); if (varResponse.completionCode != Contracts.CompletionCode.Success) { assetInfo.completionCode = varResponse.completionCode; assetInfo.statusDescription = varResponse.statusDescription; return assetInfo; } Ipmi.FruDevice fruData = WcsBladeFacade.GetFruDeviceInfo((byte)bladeId); if (fruData == null) { Tracer.WriteError("GetBladeAssetInfo(). FruDevice fruData object is null for blade {0}. Aborting... ", bladeId); assetInfo.completionCode = Contracts.CompletionCode.Failure; assetInfo.statusDescription = assetInfo.completionCode.ToString(); return assetInfo; } if (fruData.CompletionCode == (byte)CompletionCode.Success) { // Populate Chassis Info Area parameters assetInfo.chassisAreaPartNumber = fruData.ChassisInfo.PartNumber.ToString(); assetInfo.chassisAreaSerialNumber = fruData.ChassisInfo.SerialNumber.ToString(); // Populate Board Info Area parameters assetInfo.boardAreaManufacturerName = fruData.BoardInfo.Maufacturer.ToString(); assetInfo.boardAreaManufacturerDate = fruData.BoardInfo.MfgDateTime.ToString(); assetInfo.boardAreaProductName = fruData.BoardInfo.ProductName.ToString(); assetInfo.boardAreaSerialNumber = fruData.BoardInfo.SerialNumber.ToString(); assetInfo.boardAreaPartNumber = fruData.BoardInfo.ProductPartNumber.ToString(); // Populate Product Info Area parameters assetInfo.productAreaManufactureName = fruData.ProductInfo.ManufacturerName.ToString(); assetInfo.productAreaProductName = fruData.ProductInfo.ProductName.ToString(); assetInfo.productAreaPartModelNumber = fruData.ProductInfo.PartModelNumber.ToString(); assetInfo.productAreaProductVersion = fruData.ProductInfo.ProductVersion.ToString(); assetInfo.productAreaSerialNumber = fruData.ProductInfo.SerialNumber.ToString(); assetInfo.productAreaAssetTag = fruData.ProductInfo.AssetTag.ToString(); // Populate Multi Record Info Area parameters if (fruData.MultiRecordInfo != null) { assetInfo.manufacturer = fruData.MultiRecordInfo.Manufacturer.ToString(); List<Ipmi.FruByteString> fields = fruData.MultiRecordInfo.Fields.ToList(); foreach (Ipmi.FruByteString field in fields) { assetInfo.multiRecordFields.Add(field.ToString()); } } else { Tracer.WriteError("GetBladeAssetInfo(). FRU Multi Record Area is empty for blade Id{0}", bladeId); } assetInfo.completionCode = Contracts.CompletionCode.Success; } else { Tracer.WriteError("GetBladeAssetInfo(). Blade Fru Read failed with completion code: {0:X}", fruData.CompletionCode); assetInfo.completionCode = Contracts.CompletionCode.Failure; } } catch (Exception ex) { Tracer.WriteError( "GetBladeAssetInfo() failed with the exception: " + ex.Message); if (assetInfo.completionCode != Contracts.CompletionCode.Success) { assetInfo.completionCode = Contracts.CompletionCode.Failure; assetInfo.statusDescription = String.Format("GetBladeAssetInfo() failed with unknown error."); } } return assetInfo; }
/// <summary> /// command specific implementation /// </summary> internal override void commandImplementation() { BladeAssetInfoResponse myResponse = new BladeAssetInfoResponse(); try { if (!(this.argVal.ContainsKey('i'))) { Console.WriteLine(WcsCliConstants.commandFailure + " No blade ID specified, please look at command help."); return; } else { dynamic bladeId = null; this.argVal.TryGetValue('i', out bladeId); myResponse = WcsCli2CmConnectionManager.channel.GetBladeAssetInfo((int)bladeId); } } catch (Exception ex) { SharedFunc.ExceptionOutput(ex); return; } if (ResponseValidation.ValidateBladeResponse(myResponse.bladeNumber, null, myResponse, false)) { Console.WriteLine(WcsCliConstants.commandSuccess); Console.WriteLine(); Console.WriteLine("--------------------------------------"); Console.WriteLine("Blade Chassis Info Area"); Console.WriteLine("--------------------------------------"); Console.WriteLine( "Chassis Part Number = " + myResponse.chassisAreaPartNumber); Console.WriteLine( "Chassis Serial Number = " + myResponse.chassisAreaSerialNumber); Console.WriteLine("--------------------------------------"); Console.WriteLine(); Console.WriteLine("Blade Board Info Area"); Console.WriteLine("--------------------------------------"); Console.WriteLine( "Board Manufacturer Name = " + myResponse.boardAreaManufacturerName); Console.WriteLine( "Board Manufacturer Date = " + myResponse.boardAreaManufacturerDate); Console.WriteLine( "Board Product Name = " + myResponse.boardAreaProductName); Console.WriteLine( "Board Serial Number = " + myResponse.boardAreaSerialNumber); Console.WriteLine( "Board Part Number = " + myResponse.boardAreaPartNumber); Console.WriteLine("--------------------------------------"); Console.WriteLine(); Console.WriteLine("Blade Product Info Area"); Console.WriteLine("--------------------------------------"); Console.WriteLine( "Product Manufacturer Name = " + myResponse.productAreaManufactureName); Console.WriteLine( "Product Product Name = " + myResponse.productAreaProductName); Console.WriteLine( "Product Part/Model Number = " + myResponse.productAreaPartModelNumber); Console.WriteLine( "Product Version = " + myResponse.productAreaProductVersion); Console.WriteLine( "Product Serial Number = " + myResponse.productAreaSerialNumber); Console.WriteLine("PD Product Asset Tag = " + myResponse.productAreaAssetTag); Console.WriteLine("--------------------------------------"); Console.WriteLine(); Console.WriteLine("Multi Record Info Area"); Console.WriteLine("--------------------------------------"); Console.WriteLine("Manufacturer = " + myResponse.manufacturer); Console.WriteLine("Custom Fields"); Console.WriteLine(string.Join("\n", myResponse.multiRecordFields.ToArray())); } }