END_NCBI_SCOPE int main(int argc, char* argv[]) { USING_NCBI_SCOPE; // Setup error posting SetDiagTrace(eDT_Enable); SetDiagPostLevel(eDiag_Trace); SetDiagPostAllFlags(SetDiagPostAllFlags(eDPF_Default) | eDPF_All | eDPF_OmitInfoSev); UnsetDiagPostFlag(eDPF_Line); UnsetDiagPostFlag(eDPF_File); UnsetDiagPostFlag(eDPF_Location); UnsetDiagPostFlag(eDPF_LongFilename); SetDiagTraceAllFlags(SetDiagPostAllFlags(eDPF_Default)); // Init the library explicitly (this sets up the log) CONNECT_Init(0); STimeout tmo = { 5, 0 }; EIO_Status status = Soaker(argv[1], "Hello", &tmo, &tmo); cout << "Status = " << IO_StatusStr(status) << endl; return !(status == eIO_Success); }
int CServerTestApp::Run(void) { SetDiagPostLevel(eDiag_Info); SetDiagPostAllFlags(eDPF_Severity | eDPF_OmitInfoSev | eDPF_ErrorID); #if defined(NCBI_OS_MSWIN) || defined(NCBI_OS_CYGWIN) CRequestRateControl rate_control(6); #else CRequestRateControl rate_control(CRequestRateControl::kNoLimit); #endif CFastMutex rate_mutex; const CArgs& args = GetArgs(); unsigned short port = 4096; { CListeningSocket listener; while (++port & 0xFFFF) { if (listener.Listen(port, 5, fSOCK_BindAny | fSOCK_LogOff) == eIO_Success) break; } if (port == 0) { ERR_POST("CServer test: unable to find a free port to listen on"); return 2; } } SServer_Parameters params; params.init_threads = args["srvthreads"].AsInteger(); params.max_threads = args["maxsrvthreads"].AsInteger(); params.accept_timeout = &kAcceptTimeout; int max_number_of_clients = args["requests"].AsInteger(); CTestServer server(max_number_of_clients, args["maxdelay"].AsInteger()); server.SetParameters(params); server.AddListener(new CTestConnectionFactory(&server), port); server.StartListening(); CStdPoolOfThreads pool(args["maxclthreads"].AsInteger(), max_number_of_clients); pool.Spawn(args["clthreads"].AsInteger()); for (int i = max_number_of_clients; i > 0; i--) { pool.AcceptRequest(CRef<ncbi::CStdRequest> (new CConnectionRequest(port, rate_control, rate_mutex))); } server.Run(); pool.KillAllThreads(true); return 0; }
int Run(void) { CONNECT_Init(&CNcbiApplication::Instance()->GetConfig()); const CNcbiArguments& app_args = GetArguments(); m_Seed = app_args.Size() > 1 ? (unsigned int)atoi(app_args[1].c_str()) : (unsigned int)time(0); // Set error posting and tracing on maximum SetDiagTrace(eDT_Enable); SetDiagPostLevel(eDiag_Info); SetDiagPostAllFlags(SetDiagPostAllFlags(eDPF_Default) | eDPF_All | eDPF_OmitInfoSev); UnsetDiagPostFlag(eDPF_Line); UnsetDiagPostFlag(eDPF_File); UnsetDiagPostFlag(eDPF_Location); UnsetDiagPostFlag(eDPF_LongFilename); SetDiagTraceAllFlags(SetDiagPostAllFlags(eDPF_Default)); string host = "www.ncbi.nlm.nih.gov"; string path = "/Service/bounce.cgi"; string args = kEmptyStr; string uhdr = kEmptyStr; ERR_POST(Info << "Seed = " << m_Seed); srand(m_Seed); ERR_POST(Info << "Creating HTTP connection to " "http://" + host + path + &"?"[args.empty() ? 1 : 0] + args); CConn_HttpStream ios(host, path, args, uhdr); int n = TEST_StreamPushback(ios, false/*no rewind*/); // Manual CONNECT_UnInit (for implicit CONNECT_Init() by HTTP stream ctor) CORE_SetREG(0); CORE_SetLOG(0); CORE_SetLOCK(0); return n; }
END_NCBI_SCOPE int main(int argc, char* argv[]) { USING_NCBI_SCOPE; SetDiagTrace(eDT_Enable); SetDiagPostLevel(eDiag_Info); SetDiagPostAllFlags(eDPF_DateTime | eDPF_Severity | eDPF_OmitInfoSev | eDPF_ErrorID); ERR_POST(Info << "Testing NCBI CRWStream API"); int seed; if (argc == 2) { seed = atoi(argv[1]); ERR_POST(Info << "Reusing SEED " << seed); } else { seed = (int(CProcess::GetCurrentPid()) ^ int(CTime(CTime::eCurrent).GetTimeT())); ERR_POST(Info << "Using SEED " << seed); } srand(seed); unsigned char* hugedata = new unsigned char[kHugeBufsize * 3]; ERR_POST(Info << "Generating data: " << kHugeBufsize << " random bytes"); for (size_t n = 0; n < kHugeBufsize; n += 2) { hugedata[n] = (unsigned char)(rand() & 0xFF); hugedata[n + 1] = (unsigned char)(rand() & 0xFF); hugedata[n + kHugeBufsize] = (unsigned char) 0xDE; hugedata[n + kHugeBufsize + 1] = (unsigned char) 0xAD; hugedata[n + kHugeBufsize*2] = (unsigned char) 0xBE; hugedata[n + kHugeBufsize*2 + 1] = (unsigned char) 0xEF; } ERR_POST(Info << "Pumping data with random I/O"); CMyReader* rd = new CMyReader(hugedata, kHugeBufsize); CMyWriter* wr = new CMyWriter(hugedata + kHugeBufsize, kHugeBufsize); CRStream is(rd, kReadBufsize, 0, CRWStreambuf::fOwnReader); CWStream os(wr, kWriteBufsize, 0, CRWStreambuf::fOwnWriter); char* buf = new char[kMaxIOSize]; size_t n_in = 0, n_out = 0; do { size_t x_in = rand() % kMaxIOSize + 1; ERR_POST(Info << "Read: " << setw(8) << x_in); is.read(buf, x_in); if (!(x_in = (size_t) is.gcount())) break; n_in += x_in; size_t x_out = 0; while (x_out < x_in) { size_t xx_out = rand() % (x_in - x_out) + 1; ERR_POST(Info << "Write: " << setw(8) << xx_out << '/' << x_out << '+' << (x_in - x_out)); if (!os.write(buf + x_out, xx_out)) break; x_out += xx_out; } if (x_out < x_in) break; n_out += x_out; } while (is.good()); os.flush(); delete[] buf; ERR_POST(Info << "Read: " << setw(8) << n_in << '/' << kHugeBufsize << "; position: " << rd->GetPosition() << '/' << rd->GetSize()); ERR_POST(Info << "Write: " << setw(8) << n_out << '/' << kHugeBufsize << "; position: " << wr->GetPosition() << '/' << wr->GetSize()); _ASSERT(kHugeBufsize == n_in && kHugeBufsize == rd->GetSize() && kHugeBufsize == rd->GetPosition()); _ASSERT(kHugeBufsize == n_out && kHugeBufsize == wr->GetSize() && kHugeBufsize == wr->GetPosition()); ERR_POST(Info << "Comparing original with collected data"); for (size_t n = 0; n < kHugeBufsize; n++) { if (hugedata[n] != hugedata[n + kHugeBufsize]) ERR_POST(Fatal << "Mismatch @ " << n); } ERR_POST(Info << "Checking tied I/O"); buf = (char*) hugedata + kHugeBufsize; memset(buf, '\xFF', kHugeBufsize); CMyReaderWriter* rw = new CMyReaderWriter(hugedata + kHugeBufsize, kHugeBufsize); CRWStream io(rw, 2*(kReadBufsize + kWriteBufsize), 0, CRWStreambuf::fOwnReader); n_out = n_in = 0; do { if ((rand() % 10 == 2 || n_out == n_in) && n_out < kHugeBufsize) { size_t x_out = rand() % kMaxIOSize + 1; if (x_out + n_out > kHugeBufsize) x_out = kHugeBufsize - n_out; ERR_POST(Info << "Write: " << setw(8) << x_out); if (!io.write(buf - kHugeBufsize + n_out, x_out)) break; n_out += x_out; } if (rand() % 10 == 4 && n_out > n_in) { size_t x_in = (rand() & 1 ? n_out - n_in : rand() % (n_out - n_in) + 1); ERR_POST(Info << "Read: " << setw(8) << x_in); if (!io.read(buf + kHugeBufsize + n_in, x_in)) break; n_in += x_in; } if (n_out >= kHugeBufsize && n_in >= kHugeBufsize) break; } while (io.good()); // io.flush(); // not needed as everything should have been read out ERR_POST(Info << "Read: " << setw(8) << n_in << '/' << kHugeBufsize << "; " << "position: " << rw->GetRPosition() << '/' << rw->GetRSize()); ERR_POST(Info << "Write: " << setw(8) << n_out << '/' << kHugeBufsize << "; " << "position: " << rw->GetWPosition() << '/' << rw->GetWSize()); _ASSERT(kHugeBufsize == n_in && kHugeBufsize == rw->GetRSize() && kHugeBufsize == rw->GetRPosition()); _ASSERT(kHugeBufsize == n_out && kHugeBufsize == rw->GetWSize() && kHugeBufsize == rw->GetWPosition()); ERR_POST(Info << "Comparing original with collected data"); for (size_t n = 0; n < kHugeBufsize; n++) { if (hugedata[n] != hugedata[n + kHugeBufsize] || hugedata[n] != hugedata[n + kHugeBufsize*2]) { ERR_POST(Fatal << "Mismatch @ " << n); } } ERR_POST(Info << "Test completed successfully"); delete[] hugedata; return 0; }
END_NCBI_SCOPE int main(int argc, const char* argv[]) { USING_NCBI_SCOPE; TFTP_Flags flag = 0; SConnNetInfo* net_info; auto_ptr<CNcbiRegistry> reg; size_t i, j, k, l, m, n, size; reg.reset(s_CreateRegistry()); CONNECT_Init(reg.get()); // Set error posting and tracing on maximum SetDiagTrace(eDT_Enable); SetDiagPostLevel(eDiag_Info); SetDiagPostAllFlags(SetDiagPostAllFlags(eDPF_Default) | eDPF_All | eDPF_OmitInfoSev); UnsetDiagPostFlag(eDPF_Line); UnsetDiagPostFlag(eDPF_File); UnsetDiagPostFlag(eDPF_Location); UnsetDiagPostFlag(eDPF_LongFilename); SetDiagTraceAllFlags(SetDiagPostAllFlags(eDPF_Default)); if (argc <= 1) g_NCBI_ConnectRandomSeed = (int) time(0) ^ NCBI_CONNECT_SRAND_ADDEND; else g_NCBI_ConnectRandomSeed = atoi(argv[1]); CORE_LOGF(eLOG_Note, ("Random SEED = %u", g_NCBI_ConnectRandomSeed)); srand(g_NCBI_ConnectRandomSeed); LOG_POST(Info << "Test 0 of 9: Checking error log setup"); ERR_POST(Info << "Test log message using C++ Toolkit posting"); CORE_LOG(eLOG_Note, "Another test message using C Toolkit posting"); LOG_POST(Info << "Test 0 passed\n"); LOG_POST(Info << "Test 1 of 9: Memory stream"); // Testing memory stream out-of-sequence interleaving operations m = (rand() & 0x00FF) + 1; size = 0; const IOS_BASE::iostate ex = IOS_BASE::badbit; for (n = 0; n < m; n++) { CConn_MemoryStream* ms = 0; string data, back; size_t sz = 0; #if 0 LOG_POST(Info << " Micro-test " << (int) n << " of " << (int) m << " start"); #endif k = (rand() & 0x00FF) + 1; for (i = 0; i < k; i++) { l = (rand() & 0x00FF) + 1; string bit; bit.resize(l); for (j = 0; j < l; j++) { bit[j] = "0123456789"[rand() % 10]; } #if 0 LOG_POST(Info << " Data bit at " << (unsigned long) sz << ", " << (unsigned long) l << " byte(s) long: " << bit); #endif sz += l; data += bit; if (ms) assert(*ms << bit); else if (i == 0) { switch (n % 4) { case 0: #if 0 LOG_POST(Info << " CConn_MemoryStream()"); #endif ms = new CConn_MemoryStream; ms->exceptions(ex); assert(*ms << bit); break; case 1: {{ BUF buf = 0; assert(BUF_Write(&buf, bit.data(), l)); #if 0 LOG_POST(Info << " CConn_MemoryStream(BUF)"); #endif ms = new CConn_MemoryStream(buf, eTakeOwnership); ms->exceptions(ex); break; }} default: break; } } } switch (n % 4) { case 2: #if 0 LOG_POST(Info << " CConn_MemoryStream(" << (unsigned long) data.size() << ')'); #endif ms = new CConn_MemoryStream(data.data(),data.size(), eNoOwnership); break; case 3: {{ BUF buf = 0; assert(BUF_Append(&buf, data.data(), data.size())); #if 0 LOG_POST(Info << " CConn_MemoryStream(BUF, " << (unsigned long) data.size() << ')'); #endif ms = new CConn_MemoryStream(buf, eTakeOwnership); break; }} default: break; } assert(ms); if (!(rand() & 1)) { assert(*ms << endl); *ms >> back; IOS_BASE::iostate state = ms->rdstate(); assert(state == IOS_BASE::goodbit); SetDiagTrace(eDT_Disable); ms->exceptions(ex | IOS_BASE::eofbit); try { *ms >> ws; } catch (IOS_BASE::failure& ) { state = ms->rdstate(); } #if defined(NCBI_COMPILER_GCC) # if NCBI_COMPILER_VERSION == 510 && (!defined(_GLIBCXX_USE_CXX11_ABI) || _GLIBCXX_USE_CXX11_ABI != 0) catch (...) { // WORKAROUND: // At least GCC 5.1.0 in optimized mode and using new ABI: // fails to catch "IOS_BASE::failure" above. state = ms->rdstate(); } # endif #endif _ASSERT(state & IOS_BASE::eofbit); SetDiagTrace(eDT_Enable); ms->clear(); } else
END_NCBI_SCOPE int main(int argc, const char* argv[]) { USING_NCBI_SCOPE; CNcbiRegistry* reg; TFTP_Flags flag = 0; SConnNetInfo* net_info; size_t i, j, k, l, m, n, size; reg = s_CreateRegistry(); CONNECT_Init(reg); // Set error posting and tracing on maximum SetDiagTrace(eDT_Enable); SetDiagPostLevel(eDiag_Info); SetDiagPostAllFlags(eDPF_All | eDPF_OmitInfoSev); UnsetDiagPostFlag(eDPF_Line); UnsetDiagPostFlag(eDPF_File); UnsetDiagPostFlag(eDPF_Location); UnsetDiagPostFlag(eDPF_LongFilename); SetDiagTraceAllFlags(SetDiagPostAllFlags(eDPF_Default)); if (argc <= 1) g_NCBI_ConnectRandomSeed = (int) time(0) ^ NCBI_CONNECT_SRAND_ADDEND; else g_NCBI_ConnectRandomSeed = atoi(argv[1]); CORE_LOGF(eLOG_Note, ("Random SEED = %u", g_NCBI_ConnectRandomSeed)); srand(g_NCBI_ConnectRandomSeed); LOG_POST(Info << "Test 0 of 9: Checking error log setup"); ERR_POST(Info << "Test log message using C++ Toolkit posting"); CORE_LOG(eLOG_Note, "Another test message using C Toolkit posting"); LOG_POST(Info << "Test 0 passed\n"); LOG_POST("Test 1 of 9: Memory stream"); // Testing memory stream out-of-sequence interleaving operations m = (rand() & 0x00FF) + 1; size = 0; for (n = 0; n < m; n++) { CConn_MemoryStream* ms = 0; string data, back; size_t sz = 0; #if 0 LOG_POST(" Micro-test " << (int) n << " of " << (int) m << " start"); #endif k = (rand() & 0x00FF) + 1; for (i = 0; i < k; i++) { l = (rand() & 0x00FF) + 1; string bit; bit.resize(l); for (j = 0; j < l; j++) { bit[j] = "0123456789"[rand() % 10]; } #if 0 LOG_POST(" Data bit at " << (unsigned long) sz << ", " << (unsigned long) l << " byte(s) long: " << bit); #endif sz += l; data += bit; if (ms) assert(*ms << bit); else if (i == 0) { switch (n % 4) { case 0: #if 0 LOG_POST(" CConn_MemoryStream()"); #endif ms = new CConn_MemoryStream; assert(*ms << bit); break; case 1: {{ BUF buf = 0; assert(BUF_Write(&buf, bit.data(), l)); #if 0 LOG_POST(" CConn_MemoryStream(BUF)"); #endif ms = new CConn_MemoryStream(buf, eTakeOwnership); break; }} default: break; } } } switch (n % 4) { case 2: #if 0 LOG_POST(" CConn_MemoryStream(" << (unsigned long) data.size() << ')'); #endif ms = new CConn_MemoryStream(data.data(),data.size(), eNoOwnership); break; case 3: {{ BUF buf = 0; assert(BUF_Append(&buf, data.data(), data.size())); #if 0 LOG_POST(" CConn_MemoryStream(BUF, " << (unsigned long) data.size() << ')'); #endif ms = new CConn_MemoryStream(buf, eTakeOwnership); break; }} default: break; } assert(ms); if (!(rand() & 1)) { assert(*ms << endl); *ms >> back; assert(ms->good()); SetDiagTrace(eDT_Disable); *ms >> ws; SetDiagTrace(eDT_Enable); ms->clear(); } else