in core/unittest/flusher/FlusherSLSUnittest.cpp [764:1427]
void FlusherSLSUnittest::TestBuildRequest() {
#ifdef __ENTERPRISE__
EnterpriseSLSClientManager::GetInstance()->UpdateLocalRegionEndpointsAndHttpsInfo("test_region",
{kAccelerationDataEndpoint});
EnterpriseSLSClientManager::GetInstance()->UpdateRemoteRegionEndpoints(
"test_region", {"test_region-intranet.log.aliyuncs.com", "test_region.log.aliyuncs.com"});
EnterpriseSLSClientManager::GetInstance()->UpdateRemoteRegionEndpoints(
"test_region-b", {"test_region-b-intranet.log.aliyuncs.com", "test_region-b.log.aliyuncs.com"});
#endif
Json::Value configJson, optionalGoPipeline;
string errorMsg;
string configStr = R"(
{
"Type": "flusher_sls",
"Project": "test_project",
"Logstore": "test_logstore",
"Region": "test_region-b",
"Aliuid": "1234567890",
"Endpoint": "test_endpoint"
}
)";
APSARA_TEST_TRUE(ParseJsonTable(configStr, configJson, errorMsg));
FlusherSLS flusher;
flusher.SetContext(ctx);
flusher.SetMetricsRecordRef(FlusherSLS::sName, "1");
APSARA_TEST_TRUE(flusher.Init(configJson, optionalGoPipeline));
string body = "hello, world!";
string bodyLenStr = to_string(body.size());
uint32_t rawSize = 100;
string rawSizeStr = "100";
SLSSenderQueueItem item("hello, world!", rawSize, &flusher, flusher.GetQueueKey(), flusher.mLogstore);
unique_ptr<HttpSinkRequest> req;
bool keepItem = false;
string errMsg;
#ifdef __ENTERPRISE__
{
// empty ak, first try
APSARA_TEST_FALSE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
// empty ak, second try
APSARA_TEST_FALSE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(nullptr, req);
APSARA_TEST_TRUE(keepItem);
}
EnterpriseSLSClientManager::GetInstance()->SetAccessKey(
"1234567890", SLSClientManager::AuthType::ANONYMOUS, "test_ak", "test_sk");
{
// no available host, uninitialized
APSARA_TEST_FALSE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(nullptr, req);
APSARA_TEST_TRUE(keepItem);
APSARA_TEST_EQUAL(static_cast<uint32_t>(AppConfig::GetInstance()->GetSendRequestConcurrency()),
FlusherSLS::GetRegionConcurrencyLimiter(flusher.mRegion)->GetCurrentLimit());
}
{
// no available host, initialized
flusher.mCandidateHostsInfo->SetInitialized();
APSARA_TEST_FALSE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(nullptr, req);
APSARA_TEST_TRUE(keepItem);
APSARA_TEST_EQUAL(static_cast<uint32_t>(AppConfig::GetInstance()->GetSendRequestConcurrency()),
FlusherSLS::GetRegionConcurrencyLimiter(flusher.mRegion)->GetCurrentLimit());
}
EnterpriseSLSClientManager::GetInstance()->UpdateHostLatency("test_project",
EndpointMode::DEFAULT,
"test_project.test_region-b.log.aliyuncs.com",
chrono::milliseconds(100));
flusher.mCandidateHostsInfo->SelectBestHost();
#endif
// log telemetry type
{
// normal
SLSSenderQueueItem item("hello, world!", rawSize, &flusher, flusher.GetQueueKey(), flusher.mLogstore);
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
#ifdef __ENTERPRISE__
APSARA_TEST_FALSE(req->mHTTPSFlag);
#else
APSARA_TEST_TRUE(req->mHTTPSFlag);
#endif
APSARA_TEST_EQUAL("/logstores/test_logstore/shards/lb", req->mUrl);
APSARA_TEST_EQUAL("", req->mQueryString);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(12U, req->mHeader.size());
#else
APSARA_TEST_EQUAL(11U, req->mHeader.size());
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHeader[HOST]);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHeader[HOST]);
#endif
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
#endif
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHost);
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(80, req->mPort);
#else
APSARA_TEST_EQUAL(443, req->mPort);
#endif
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_FALSE(item.mRealIpFlag);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", item.mCurrentHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", item.mCurrentHost);
#endif
}
// arms_traces telemetry type
{
flusher.mTelemetryType = sls_logs::SLS_TELEMETRY_TYPE_APM_TRACES;
flusher.mSubpath = APM_TRACES_URL;
// normal
SLSSenderQueueItem item("hello, world!", rawSize, &flusher, flusher.GetQueueKey(), flusher.mLogstore);
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
#ifdef __ENTERPRISE__
APSARA_TEST_FALSE(req->mHTTPSFlag);
#else
APSARA_TEST_TRUE(req->mHTTPSFlag);
#endif
APSARA_TEST_EQUAL(APM_TRACES_URL, req->mUrl);
APSARA_TEST_EQUAL("", req->mQueryString);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(12U, req->mHeader.size());
#else
APSARA_TEST_EQUAL(11U, req->mHeader.size());
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHeader[HOST]);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHeader[HOST]);
#endif
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
#endif
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHost);
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(80, req->mPort);
#else
APSARA_TEST_EQUAL(443, req->mPort);
#endif
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_FALSE(item.mRealIpFlag);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", item.mCurrentHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", item.mCurrentHost);
#endif
}
// arms_metrics telemetry type
{
flusher.mTelemetryType = sls_logs::SLS_TELEMETRY_TYPE_APM_METRICS;
flusher.mSubpath = APM_METRICS_URL;
// normal
SLSSenderQueueItem item("hello, world!", rawSize, &flusher, flusher.GetQueueKey(), flusher.mLogstore);
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
#ifdef __ENTERPRISE__
APSARA_TEST_FALSE(req->mHTTPSFlag);
#else
APSARA_TEST_TRUE(req->mHTTPSFlag);
#endif
APSARA_TEST_EQUAL(APM_METRICS_URL, req->mUrl);
APSARA_TEST_EQUAL("", req->mQueryString);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(12U, req->mHeader.size());
#else
APSARA_TEST_EQUAL(11U, req->mHeader.size());
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHeader[HOST]);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHeader[HOST]);
#endif
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
#endif
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHost);
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(80, req->mPort);
#else
APSARA_TEST_EQUAL(443, req->mPort);
#endif
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_FALSE(item.mRealIpFlag);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", item.mCurrentHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", item.mCurrentHost);
#endif
}
// arms_agentinfo telemetry type
{
flusher.mTelemetryType = sls_logs::SLS_TELEMETRY_TYPE_APM_AGENTINFOS;
flusher.mSubpath = APM_AGENTINFOS_URL;
// normal
SLSSenderQueueItem item("hello, world!", rawSize, &flusher, flusher.GetQueueKey(), flusher.mLogstore);
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
#ifdef __ENTERPRISE__
APSARA_TEST_FALSE(req->mHTTPSFlag);
#else
APSARA_TEST_TRUE(req->mHTTPSFlag);
#endif
APSARA_TEST_EQUAL(APM_AGENTINFOS_URL, req->mUrl);
APSARA_TEST_EQUAL("", req->mQueryString);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(12U, req->mHeader.size());
#else
APSARA_TEST_EQUAL(11U, req->mHeader.size());
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHeader[HOST]);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHeader[HOST]);
#endif
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
#endif
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHost);
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(80, req->mPort);
#else
APSARA_TEST_EQUAL(443, req->mPort);
#endif
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_FALSE(item.mRealIpFlag);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", item.mCurrentHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", item.mCurrentHost);
#endif
}
flusher.mTelemetryType = sls_logs::SLS_TELEMETRY_TYPE_LOGS;
{
// event group list
SLSSenderQueueItem item("hello, world!",
rawSize,
&flusher,
flusher.GetQueueKey(),
flusher.mLogstore,
RawDataType::EVENT_GROUP_LIST);
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
#ifdef __ENTERPRISE__
APSARA_TEST_FALSE(req->mHTTPSFlag);
#else
APSARA_TEST_TRUE(req->mHTTPSFlag);
#endif
APSARA_TEST_EQUAL("/logstores/test_logstore/shards/lb", req->mUrl);
APSARA_TEST_EQUAL("", req->mQueryString);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(13U, req->mHeader.size());
#else
APSARA_TEST_EQUAL(12U, req->mHeader.size());
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHeader[HOST]);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHeader[HOST]);
#endif
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[X_LOG_BODYRAWSIZE]);
APSARA_TEST_EQUAL(LOG_MODE_BATCH_GROUP, req->mHeader[X_LOG_MODE]);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
#endif
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHost);
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(80, req->mPort);
#else
APSARA_TEST_EQUAL(443, req->mPort);
#endif
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", item.mCurrentHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", item.mCurrentHost);
#endif
}
{
// shard hash
SLSSenderQueueItem item("hello, world!",
rawSize,
&flusher,
flusher.GetQueueKey(),
flusher.mLogstore,
RawDataType::EVENT_GROUP,
"hash_key");
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
#ifdef __ENTERPRISE__
APSARA_TEST_FALSE(req->mHTTPSFlag);
#else
APSARA_TEST_TRUE(req->mHTTPSFlag);
#endif
APSARA_TEST_EQUAL("/logstores/test_logstore/shards/route", req->mUrl);
map<string, string> params{{"key", "hash_key"}};
APSARA_TEST_EQUAL(GetQueryString(params), req->mQueryString);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(12U, req->mHeader.size());
#else
APSARA_TEST_EQUAL(11U, req->mHeader.size());
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHeader[HOST]);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHeader[HOST]);
#endif
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
#endif
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHost);
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(80, req->mPort);
#else
APSARA_TEST_EQUAL(443, req->mPort);
#endif
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_FALSE(item.mRealIpFlag);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", item.mCurrentHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", item.mCurrentHost);
#endif
}
{
// exactly once
auto cpt = make_shared<RangeCheckpoint>();
cpt->index = 0;
cpt->data.set_hash_key("hash_key_0");
cpt->data.set_sequence_id(1);
SLSSenderQueueItem item("hello, world!",
rawSize,
&flusher,
flusher.GetQueueKey(),
flusher.mLogstore,
RawDataType::EVENT_GROUP,
"hash_key_0",
std::move(cpt));
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
#ifdef __ENTERPRISE__
APSARA_TEST_FALSE(req->mHTTPSFlag);
#else
APSARA_TEST_TRUE(req->mHTTPSFlag);
#endif
APSARA_TEST_EQUAL("/logstores/test_logstore/shards/route", req->mUrl);
map<string, string> params{{"key", "hash_key_0"}, {"seqid", "1"}};
APSARA_TEST_EQUAL(GetQueryString(params), req->mQueryString);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(12U, req->mHeader.size());
#else
APSARA_TEST_EQUAL(11U, req->mHeader.size());
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHeader[HOST]);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHeader[HOST]);
#endif
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
#endif
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHost);
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(80, req->mPort);
#else
APSARA_TEST_EQUAL(443, req->mPort);
#endif
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_FALSE(item.mRealIpFlag);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", item.mCurrentHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", item.mCurrentHost);
#endif
}
// metric telemtery type
flusher.mTelemetryType = sls_logs::SlsTelemetryType::SLS_TELEMETRY_TYPE_METRICS;
{
SLSSenderQueueItem item("hello, world!", rawSize, &flusher, flusher.GetQueueKey(), flusher.mLogstore);
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
#ifdef __ENTERPRISE__
APSARA_TEST_FALSE(req->mHTTPSFlag);
#else
APSARA_TEST_TRUE(req->mHTTPSFlag);
#endif
APSARA_TEST_EQUAL("/prometheus/test_project/test_logstore/api/v1/write", req->mUrl);
APSARA_TEST_EQUAL("", req->mQueryString);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(12U, req->mHeader.size());
#else
APSARA_TEST_EQUAL(11U, req->mHeader.size());
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHeader[HOST]);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHeader[HOST]);
#endif
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
#endif
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", req->mHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", req->mHost);
#endif
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL(80, req->mPort);
#else
APSARA_TEST_EQUAL(443, req->mPort);
#endif
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_FALSE(item.mRealIpFlag);
#ifdef __ENTERPRISE__
APSARA_TEST_EQUAL("test_project.test_region-b.log.aliyuncs.com", item.mCurrentHost);
#else
APSARA_TEST_EQUAL("test_project.test_endpoint", item.mCurrentHost);
#endif
}
flusher.mTelemetryType = sls_logs::SlsTelemetryType::SLS_TELEMETRY_TYPE_LOGS;
#ifdef __ENTERPRISE__
{
// region mode changed
EnterpriseSLSClientManager::GetInstance()->CopyLocalRegionEndpointsAndHttpsInfoIfNotExisted("test_region",
"test_region-b");
auto old = flusher.mCandidateHostsInfo.get();
APSARA_TEST_FALSE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_NOT_EQUAL(old, flusher.mCandidateHostsInfo.get());
EnterpriseSLSClientManager::GetInstance()->UpdateHostLatency("test_project",
EndpointMode::ACCELERATE,
"test_project." + kAccelerationDataEndpoint,
chrono::milliseconds(10));
flusher.mCandidateHostsInfo->SelectBestHost();
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL("test_project." + kAccelerationDataEndpoint, req->mHost);
}
// real ip
BOOL_FLAG(send_prefer_real_ip) = true;
{
// ip not empty
EnterpriseSLSClientManager::GetInstance()->SetRealIp("test_region-b", "192.168.0.1");
SLSSenderQueueItem item("hello, world!", rawSize, &flusher, flusher.GetQueueKey(), flusher.mLogstore);
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL(HTTP_POST, req->mMethod);
APSARA_TEST_FALSE(req->mHTTPSFlag);
APSARA_TEST_EQUAL("/logstores/test_logstore/shards/lb", req->mUrl);
APSARA_TEST_EQUAL("", req->mQueryString);
APSARA_TEST_EQUAL(12U, req->mHeader.size());
APSARA_TEST_EQUAL("test_project.192.168.0.1", req->mHeader[HOST]);
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
APSARA_TEST_EQUAL("192.168.0.1", req->mHost);
APSARA_TEST_EQUAL(80, req->mPort);
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_TRUE(item.mRealIpFlag);
APSARA_TEST_EQUAL("192.168.0.1", item.mCurrentHost);
}
{
// ip empty
EnterpriseSLSClientManager::GetInstance()->SetRealIp("test_region-b", "");
SLSSenderQueueItem item("hello, world!", rawSize, &flusher, flusher.GetQueueKey(), flusher.mLogstore);
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL("test_project." + kAccelerationDataEndpoint, req->mHeader[HOST]);
APSARA_TEST_EQUAL(SLSClientManager::GetInstance()->GetUserAgent(), req->mHeader[USER_AGENT]);
APSARA_TEST_FALSE(req->mHeader[DATE].empty());
APSARA_TEST_EQUAL(TYPE_LOG_PROTOBUF, req->mHeader[CONTENT_TYPE]);
APSARA_TEST_EQUAL(bodyLenStr, req->mHeader[CONTENT_LENGTH]);
APSARA_TEST_EQUAL(CalcMD5(req->mBody), req->mHeader[CONTENT_MD5]);
APSARA_TEST_EQUAL(LOG_API_VERSION, req->mHeader[X_LOG_APIVERSION]);
APSARA_TEST_EQUAL(HMAC_SHA1, req->mHeader[X_LOG_SIGNATUREMETHOD]);
APSARA_TEST_EQUAL("lz4", req->mHeader[X_LOG_COMPRESSTYPE]);
APSARA_TEST_EQUAL(rawSizeStr, req->mHeader[X_LOG_BODYRAWSIZE]);
APSARA_TEST_EQUAL(MD5_SHA1_SALT_KEYPROVIDER, req->mHeader[X_LOG_KEYPROVIDER]);
APSARA_TEST_FALSE(req->mHeader[AUTHORIZATION].empty());
APSARA_TEST_EQUAL(body, req->mBody);
APSARA_TEST_EQUAL("test_project." + kAccelerationDataEndpoint, req->mHost);
APSARA_TEST_EQUAL(80, req->mPort);
APSARA_TEST_EQUAL(static_cast<uint32_t>(INT32_FLAG(default_http_request_timeout_sec)), req->mTimeout);
APSARA_TEST_EQUAL(1U, req->mMaxTryCnt);
APSARA_TEST_FALSE(req->mFollowRedirects);
APSARA_TEST_EQUAL(&item, req->mItem);
APSARA_TEST_FALSE(item.mRealIpFlag);
APSARA_TEST_EQUAL("test_project." + kAccelerationDataEndpoint, item.mCurrentHost);
}
{
// ip empty, and region mode changed
auto& endpoints = EnterpriseSLSClientManager::GetInstance()->mRegionCandidateEndpointsMap["test_region-b"];
endpoints.mMode = EndpointMode::CUSTOM;
endpoints.mLocalEndpoints = {"custom.endpoint"};
auto old = flusher.mCandidateHostsInfo.get();
APSARA_TEST_FALSE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_NOT_EQUAL(old, flusher.mCandidateHostsInfo.get());
EnterpriseSLSClientManager::GetInstance()->UpdateHostLatency(
"test_project", EndpointMode::CUSTOM, "test_project.custom.endpoint", chrono::milliseconds(10));
flusher.mCandidateHostsInfo->SelectBestHost();
APSARA_TEST_TRUE(flusher.BuildRequest(&item, req, &keepItem, &errMsg));
APSARA_TEST_EQUAL("test_project.custom.endpoint", req->mHost);
}
BOOL_FLAG(send_prefer_real_ip) = false;
#endif
}