//--------------------------------------------------------------------------- // @function: // CICGTest::EresUnittest_RunUnsupportedMinidumpTests // // @doc: // Run all unsupported Minidump-based tests // //--------------------------------------------------------------------------- GPOS_RESULT CICGTest::EresUnittest_RunUnsupportedMinidumpTests() { // enable (Redistribute, Broadcast) hash join plans CAutoTraceFlag atf1(EopttraceEnableRedistributeBroadcastHashJoin, true /*fVal*/); CAutoTraceFlag atf2(EopttraceDisableXformBase + CXform::ExfDynamicGet2DynamicTableScan, true); CAutoMemoryPool amp(CAutoMemoryPool::ElcNone); IMemoryPool *pmp = amp.Pmp(); GPOS_RESULT eres = GPOS_OK; const ULONG ulTests = GPOS_ARRAY_SIZE(unSupportedTestCases); for (ULONG ul = m_ulUnsupportedTestCounter; ul < ulTests; ul++) { const CHAR *szFilename = unSupportedTestCases[ul].szFilename; CDXLMinidump *pdxlmd = CMinidumperUtils::PdxlmdLoad(pmp, szFilename); bool unmatchedException = false; ULONG unmatchedExceptionMajor = 0; ULONG unmatchedExceptionMinor = 0; GPOS_TRY { ICostModel *pcm = CTestUtils::Pcm(pmp); COptimizerConfig *poconf = pdxlmd->Poconf(); CDXLNode *pdxlnPlan = CMinidumperUtils::PdxlnExecuteMinidump ( pmp, szFilename, poconf->Pcm()->UlHosts() /*ulSegments*/, 1 /*ulSessionId*/, 1, /*ulCmdId*/ poconf, NULL /*pceeval*/ ); GPOS_CHECK_ABORT; pdxlnPlan->Release(); pcm->Release(); // test should have thrown eres = GPOS_FAILED; break; } GPOS_CATCH_EX(ex) { unmatchedExceptionMajor = ex.UlMajor(); unmatchedExceptionMinor = ex.UlMinor(); // verify expected exception if (unSupportedTestCases[ul].ulMajor == unmatchedExceptionMajor && unSupportedTestCases[ul].ulMinor == unmatchedExceptionMinor) { eres = GPOS_OK; } else { unmatchedException = true; eres = GPOS_FAILED; } GPOS_RESET_EX; } GPOS_CATCH_END; GPOS_DELETE(pdxlmd); m_ulUnsupportedTestCounter++; if (GPOS_FAILED == eres && unmatchedException) { CAutoTrace at(pmp); at.Os() << "Test failed due to unmatched exceptions." << std::endl; at.Os() << " Expected result: " << unSupportedTestCases[ul].ulMajor << "." << unSupportedTestCases[ul].ulMinor << std::endl; at.Os() << " Actual result: " << unmatchedExceptionMajor << "." << unmatchedExceptionMinor << std::endl; } } if (GPOS_OK == eres) { m_ulUnsupportedTestCounter = 0; } return eres; }
//--------------------------------------------------------------------------- // @function: // PvExec // // @doc: // Function driving execution. // //--------------------------------------------------------------------------- static void * PvExec ( void *pv ) { CMainArgs *pma = (CMainArgs*) pv; CBitVector bv(ITask::PtskSelf()->Pmp(), CUnittest::UlTests()); CHAR ch = '\0'; CHAR *szFileName = NULL; BOOL fMinidump = false; BOOL fUnittest = false; while (pma->FGetopt(&ch)) { CHAR *szTestName = NULL; switch (ch) { case 'U': szTestName = optarg; // fallthru case 'u': CUnittest::FindTest(bv, CUnittest::EttStandard, szTestName); fUnittest = true; break; case 'x': CUnittest::FindTest(bv, CUnittest::EttExtended, NULL /*szTestName*/); fUnittest = true; break; case 'T': CUnittest::SetTraceFlag(optarg); break; case 'd': fMinidump = true; szFileName = optarg; break; default: // ignore other parameters break; } } if (fMinidump && fUnittest) { GPOS_TRACE(GPOS_WSZ_LIT("Cannot specify -d and -U/-u options at the same time")); return NULL; } if (fMinidump) { // initialize DXL support InitDXL(); CMDCache::Init(); CAutoMemoryPool amp; IMemoryPool *pmp = amp.Pmp(); // load dump file CDXLMinidump *pdxlmd = CMinidumperUtils::PdxlmdLoad(pmp, szFileName); GPOS_CHECK_ABORT; COptimizerConfig *poconf = pdxlmd->Poconf(); if (NULL == poconf) { poconf = COptimizerConfig::PoconfDefault(pmp); } else { poconf -> AddRef(); } ULONG ulSegments = CTestUtils::UlSegments(poconf); CDXLNode *pdxlnPlan = CMinidumperUtils::PdxlnExecuteMinidump ( pmp, szFileName, ulSegments, 1 /*ulSessionId*/, 1 /*ulCmdId*/, poconf, NULL /*pceeval*/ ); GPOS_DELETE(pdxlmd); poconf->Release(); pdxlnPlan->Release(); CMDCache::Shutdown(); } else { GPOS_ASSERT(fUnittest); tests_failed = CUnittest::Driver(&bv); } return NULL; }