bool VerifyDataPat_r10b::RunCoreTest() { /** \verbatim * Assumptions: * 1) Test WriteDataPat_r10b has run prior. * 2) An individual test within this group cannot run, the entire group * must be executed every time. Each subsequent test relies on the prior. * \endverbatim */ VerifyDataPattern(); return true; }
void PRPOffsetSinglePgSingleBlk_r10b::RunCoreTest() { /** \verbatim * Assumptions: * 1) Test CreateResources_r10b has run prior. * \endverbatim */ string work; int64_t X; bool enableLog; LOG_NRM("Initialize random seed"); srand (17); // Lookup objs which were created in a prior test within group SharedIOSQPtr iosq = CAST_TO_IOSQ(gRsrcMngr->GetObj(IOSQ_GROUP_ID)); SharedIOCQPtr iocq = CAST_TO_IOCQ(gRsrcMngr->GetObj(IOCQ_GROUP_ID)); LOG_NRM("Get namspc and determine LBA size"); Informative::Namspc namspcData = gInformative->Get1stBareMetaE2E(); send_64b_bitmask prpBitmask = (send_64b_bitmask)(MASK_PRP1_PAGE); LBAFormat lbaFormat = namspcData.idCmdNamspc->GetLBAFormat(); uint64_t lbaDataSize = namspcData.idCmdNamspc->GetLBADataSize(); uint8_t mpsRegVal; if (gCtrlrConfig->GetMPS(mpsRegVal) == false) throw FrmwkEx(HERE, "Unable to get MPS value from CC."); switch (namspcData.type) { case Informative::NS_BARE: X = (int64_t)(1 << (mpsRegVal + 12)) - lbaDataSize; break; case Informative::NS_METAS: if (gRsrcMngr->SetMetaAllocSize(lbaFormat.MS) == false) throw FrmwkEx(HERE); X = (int64_t)(1 << (mpsRegVal + 12)) - lbaDataSize; break; case Informative::NS_METAI: X = (int64_t)(1 << (mpsRegVal + 12)) - (lbaDataSize + lbaFormat.MS); break; case Informative::NS_E2ES: case Informative::NS_E2EI: throw FrmwkEx(HERE, "Deferring work to handle this case in future"); break; } if (X <= 0) { LOG_WARN("CC.MPS (0x%04X) < lba data size(LBADS) + MS " "(0x08%lX + 0x04%X) ; Can't run test.", (1 << (mpsRegVal + 12)), lbaDataSize, lbaFormat.MS); return; } LOG_NRM("Prepare cmds to send to the queues."); SharedWritePtr writeCmd = CreateWriteCmd(namspcData); SharedReadPtr readCmd = CreateReadCmd(namspcData); DataPattern dataPattern; uint64_t wrVal; uint32_t prp2RandVal[2]; for (int64_t pgOff = 0; pgOff <= X; pgOff += 4) { LOG_NRM("Processing at page offset #%ld", pgOff); if ((pgOff % 8) != 0) { dataPattern = DATAPAT_CONST_8BIT; wrVal = pgOff; prp2RandVal[0] = rand(); prp2RandVal[1] = rand(); work = str(boost::format("dataPat.constb.memOff.%d") % pgOff); } else { dataPattern = DATAPAT_INC_16BIT; wrVal = pgOff; prp2RandVal[0] = 0; prp2RandVal[1] = 0; work = str(boost::format("dataPat.incw.memOff.%d") % pgOff); } SharedMemBufferPtr writeMem = SharedMemBufferPtr(new MemBuffer()); switch (namspcData.type) { case Informative::NS_BARE: writeMem->InitOffset1stPage(lbaDataSize, pgOff, false); break; case Informative::NS_METAS: writeMem->InitOffset1stPage(lbaDataSize, pgOff, false); writeCmd->SetMetaDataPattern(dataPattern, wrVal); break; case Informative::NS_METAI: writeMem->InitOffset1stPage (lbaDataSize + lbaFormat.MS, pgOff, false); break; case Informative::NS_E2ES: case Informative::NS_E2EI: throw FrmwkEx(HERE, "Deferring work to handle this case in future"); break; } writeCmd->SetPrpBuffer(prpBitmask, writeMem); writeMem->SetDataPattern(dataPattern, wrVal); LOG_NRM("Set 64 bits of PRP2 CDW 8 & 9 with random or 0 for wr cmd."); writeCmd->SetDword(prp2RandVal[0], 8); writeCmd->SetDword(prp2RandVal[1], 9); enableLog = false; if ((pgOff <= 8) || (pgOff >= (X - 8))) enableLog = true; IO::SendAndReapCmd(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, iosq, iocq, writeCmd, work, enableLog); SharedMemBufferPtr readMem = SharedMemBufferPtr(new MemBuffer()); switch (namspcData.type) { case Informative::NS_BARE: readMem->InitOffset1stPage(lbaDataSize, pgOff, false); break; case Informative::NS_METAS: readMem->InitOffset1stPage(lbaDataSize, pgOff, false); break; case Informative::NS_METAI: readMem->InitOffset1stPage (lbaDataSize + lbaFormat.MS, pgOff, false); break; case Informative::NS_E2ES: case Informative::NS_E2EI: throw FrmwkEx(HERE, "Deferring work to handle this case in future"); break; } readCmd->SetPrpBuffer(prpBitmask, readMem); LOG_NRM("Set 64 bits of PRP2 CDW 8 & 9 with random or 0 for rd cmd."); readCmd->SetDword(prp2RandVal[0], 8); readCmd->SetDword(prp2RandVal[1], 9); IO::SendAndReapCmd(mGrpName, mTestName, DEFAULT_CMD_WAIT_ms, iosq, iocq, readCmd, work, enableLog); VerifyDataPattern(readCmd, dataPattern, wrVal); } }