static void MockSyncSend()

in core/unittest/sender/SenderUnittest.cpp [549:643]


    static void MockSyncSend(const std::string& projectName,
                             const std::string& logstore,
                             const std::string& logData,
                             SEND_DATA_TYPE dataType,
                             int32_t rawSize,
                             sls_logs::SlsCompressType compressType) {
        if (projectName == string("logtail-test-network-project")) {
            // printf("test network %d.\n", gTestNetWorkStat ? 1 : 0);
            if (gTestNetWorkStat) {
                return;
            }
            throw sdk::LOGException(sdk::LOGE_REQUEST_ERROR, "Can not connect to server.");
        }
        LOG_INFO(sLogger, ("MockSyncSend, projectName", projectName)("logstore", logstore)("dataType", dataType));
        vector<LogGroup> logGroupVec;
        Sender::ParseLogGroupFromString(logData, dataType, rawSize, compressType, logGroupVec);

        for (vector<LogGroup>::iterator iter = logGroupVec.begin(); iter != logGroupVec.end(); ++iter) {
            bool projectDisabled = true;
            if (iter->logs_size() > 0) {
                if (gNetWorkStat && iter->category() == "app_log") {
                    PTScopedLock lock(gBufferLogGroupsLock);
                    gBufferLogGroups.push_back(*iter);
                }
                if (gNetWorkStat && (projectName.find("_proj") != string::npos)) /* "1000000_proj" */
                {
                    int prjIndex = atoi(projectName.substr(0, 7).c_str()) - 1000000;
                    if (prjIndex <= gProjectNetEnableIndex) {
                        projectDisabled = false;
                        gRecvLogGroupLock.lock();
                        gRcvLogGroup = *iter;
                        gCounter += gRcvLogGroup.logs_size();
                        gMessageSize += gRcvLogGroup.ByteSize();
                        gRecvLogGroupLock.unlock();
                        LOG_INFO(
                            sLogger,
                            ("gRcvLogGroup.ByteSize()", gRcvLogGroup.ByteSize())("logData.size()", logData.size()));
                    } else {
                        ++gSynProjectSendFailCount;
                    }
                }
                if (gNetWorkStat && projectName == STRING_FLAG(profile_project_name)
                    && iter->category() == "logtail_status_profile") {
                    gStatusCount++;
                    gStatusLogGroup = *iter;
                }
            }
            if (!gNetWorkStat || projectDisabled) {
                // printf("[@MockSyncSend] fail %s %s %d.\n", projectName.c_str(), logstore.c_str(), rawSize);

                if (gSendFailType == 1)
                    throw sdk::LOGException(sdk::LOGE_REQUEST_ERROR, "Can not connect to server.");
                else if (gSendFailType == 2) {
                    int randInt = rand() % 4;
                    if (randInt == 0)
                        throw sdk::LOGException(sdk::LOGE_REQUEST_ERROR, "Can not connect to server.");
                    else if (randInt == 1)
                        throw sdk::LOGException(sdk::LOGE_WRITE_QUOTA_EXCEED, "project write quota exceed.");
                    else if (randInt == 2)
                        throw sdk::LOGException(sdk::LOGE_SERVER_BUSY, "connect to server timeout.");
                    else if (randInt == 3)
                        throw sdk::LOGException(sdk::LOGE_INTERNAL_SERVER_ERROR, "connect to server timeout.");
                } else if (gSendFailType == 3) {
                    int randInt = rand() % 5;
                    if (randInt == 0)
                        throw sdk::LOGException(sdk::LOGE_UNAUTHORIZED, "LOGE_UNAUTHORIZED.");
                    else if (randInt == 1)
                        throw sdk::LOGException(sdk::LOGE_BAD_RESPONSE, "LOGE_BAD_RESPONSE.");
                    else if (randInt == 2)
                        throw sdk::LOGException(sdk::LOGE_CATEGORY_NOT_EXIST, "LOGE_CATEGORY_NOT_EXIST.");
                    else if (randInt == 3)
                        throw sdk::LOGException(sdk::LOGE_PROJECT_NOT_EXIST, "LOGE_PROJECT_NOT_EXIST.");
                    else if (randInt == 4)
                        throw sdk::LOGException(sdk::LOGE_TOPIC_NOT_EXIST, "LOGE_TOPIC_NOT_EXIST.");
                } else if (gSendFailType == 4) {
                    int randInt = rand() % 2;
                    if (randInt == 0) {
                        throw sdk::LOGException(sdk::LOGE_WRITE_QUOTA_EXCEED, "LOGE_WRITE_QUOTA_EXCEED");
                    } else if (randInt == 1) {
                        throw sdk::LOGException(sdk::LOGE_SHARD_WRITE_QUOTA_EXCEED, "LOGE_SHARD_WRITE_QUOTA_EXCEED");
                    }
                } else if (gSendFailType == 5) {
                    int randInt = rand() % 2;
                    if (randInt == 0) {
                        throw sdk::LOGException(sdk::LOGE_SERVER_BUSY, "LOGE_WRITE_QUOTA_EXCEED");
                    } else if (randInt == 1) {
                        throw sdk::LOGException(sdk::LOGE_INTERNAL_SERVER_ERROR, "LOGE_SHARD_WRITE_QUOTA_EXCEED");
                    }
                }

            } else {
                // printf("[@MockSyncSend] success %s %s %d.\n", projectName.c_str(), logstore.c_str(), rawSize);
            }
        }
    }