Skip to content

Commit

Permalink
SNOW-1856491: increase test coverage (#810)
Browse files Browse the repository at this point in the history
  • Loading branch information
sfc-gh-ext-simba-hx authored Jan 27, 2025
1 parent c4b0fe2 commit 6413c28
Show file tree
Hide file tree
Showing 14 changed files with 329 additions and 403 deletions.
66 changes: 63 additions & 3 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,9 @@ jobs:
CLOUD_PROVIDER: ${{ matrix.cloud_provider }}
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
run: ci/test_mac.sh
build-test-codecov:
build-test-codecov-aws:
needs: [build-test-linux, build-test-win]
name: Build-Test-CodeCov-Linux
name: Build-Test-CodeCov-Linux-AWS
runs-on: ubuntu-latest
strategy:
fail-fast: false
Expand All @@ -216,7 +216,33 @@ jobs:
CLOUD_PROVIDER: AWS
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
run: ci/test_linux.sh
- name: Test on Azure
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
# without the token code cov may fail because of Github limits https://github.com/codecov/codecov-action/issues/557
token: ${{ secrets.CODE_COV_UPLOAD_TOKEN }}
fail_ci_if_error: true
build-test-codecov-azure:
needs: [build-test-linux, build-test-win]
name: Build-Test-CodeCov-Linux-AZURE
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
build_type: [ 'Release' ]
steps:
- uses: actions/checkout@v4
- name: Build
shell: bash
env:
BUILD_TYPE: ${{ matrix.build_type }}
CLIENT_CODE_COVERAGE: 1
run: ci/build_linux.sh
- uses: actions/setup-python@v5
with:
python-version: '3.13'
architecture: 'x64'
- name: Test on AZURE
shell: bash
env:
BUILD_TYPE: ${{ matrix.build_type }}
Expand All @@ -230,3 +256,37 @@ jobs:
# without the token code cov may fail because of Github limits https://github.com/codecov/codecov-action/issues/557
token: ${{ secrets.CODE_COV_UPLOAD_TOKEN }}
fail_ci_if_error: true
build-test-codecov-gcp:
needs: [build-test-linux, build-test-win]
name: Build-Test-CodeCov-Linux-GCP
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
build_type: [ 'Release' ]
steps:
- uses: actions/checkout@v4
- name: Build
shell: bash
env:
BUILD_TYPE: ${{ matrix.build_type }}
CLIENT_CODE_COVERAGE: 1
run: ci/build_linux.sh
- uses: actions/setup-python@v5
with:
python-version: '3.13'
architecture: 'x64'
- name: Test on GCP
shell: bash
env:
BUILD_TYPE: ${{ matrix.build_type }}
CLIENT_CODE_COVERAGE: 1
CLOUD_PROVIDER: GCP
PARAMETERS_SECRET: ${{ secrets.PARAMETERS_SECRET }}
run: ci/test_linux.sh
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
# without the token code cov may fail because of Github limits https://github.com/codecov/codecov-action/issues/557
token: ${{ secrets.CODE_COV_UPLOAD_TOKEN }}
fail_ci_if_error: true
2 changes: 1 addition & 1 deletion cmake/flags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ if (LINUX)
# Code coverage for Linux
if (CLIENT_CODE_COVERAGE) # Only when code coverage is enabled
message("Code coverage is enabled CLIENT_CODE_COVERAGE=" ${CLIENT_CODE_COVERAGE})
add_compile_options(--coverage -O0 $<$<COMPILE_LANGUAGE:CXX>:-fno-elide-constructors> -fno-inline -fno-inline-small-functions -fno-default-inline)
add_compile_options(--coverage -fprofile-arcs -ftest-coverage -O0 $<$<COMPILE_LANGUAGE:CXX>:-fno-elide-constructors> -fno-inline -fno-inline-small-functions -fno-default-inline)
add_link_options(--coverage)
else()
message("Code coverage is disabled CLIENT_CODE_COVERAGE=" ${CLIENT_CODE_COVERAGE})
Expand Down
8 changes: 4 additions & 4 deletions cpp/jwt/jwtWrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,13 @@ int CSET_containsClaimset(CLAIMSET cjwt_cset, const char *key)
return 0;
}

void CSET_addStrClaimset(CLAIMSET cjwt_cset, const char *key, char *val)
void CSET_addStrClaim(CLAIMSET cjwt_cset, const char* key, const char* val)
{
IClaimSet *cset = static_cast<IClaimSet *>(cjwt_cset);
cset->addClaim(std::string(key), std::string(val));
}

void CSET_addIntClaimset(CLAIMSET cjwt_cset, const char *key, long value)
void CSET_addIntClaim(CLAIMSET cjwt_cset, const char *key, long value)
{
IClaimSet *cset = static_cast<IClaimSet *>(cjwt_cset);
cset->addClaim(std::string(key), value);
Expand All @@ -94,7 +94,7 @@ double CSET_getClaimsetDouble(CLAIMSET cjwt_cset, const char *key)
return cset->getClaimInDouble(std::string(key));
}

void CSET_removeClaim(CLAIMSET cjwt_cset, char *key)
void CSET_removeClaim(CLAIMSET cjwt_cset, const char *key)
{
IClaimSet *cset = static_cast<IClaimSet *>(cjwt_cset);
cset->removeClaim(std::string(key));
Expand Down Expand Up @@ -196,7 +196,7 @@ HEADER CJWT_getHeader(CJWT cjwt_obj)
return static_cast<HEADER>((ijwt_obj->getHeader()).get());
}

void CJWT_deleteToken(CJWT cjwt_obj)
void CJWT_delete_cjwt(CJWT cjwt_obj)
{
IJwt *ijwt_obj = static_cast<IJwt *>(cjwt_obj);
if (ijwt_obj->getHeader() != NULL)
Expand Down
166 changes: 13 additions & 153 deletions cpp/lib/BindUploader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ std::string BindUploader::getCreateStageStmt()

void BindUploader::addStringValue(const std::string& val, SF_DB_TYPE type)
{
UNUSED(type);

if (m_curParamIndex != 0)
{
m_csvStream << ",";
Expand All @@ -213,52 +215,19 @@ void BindUploader::addStringValue(const std::string& val, SF_DB_TYPE type)
}
else
{
switch (type)
if (std::string::npos == val.find_first_of("\"\n,\\"))
{
case SF_DB_TYPE_TIME:
{
std::string timeStr = convertTimeFormat(val);
m_csvStream << timeStr;
m_dataSize += timeStr.length();
break;
}

case SF_DB_TYPE_DATE:
{
std::string dateStr = convertDateFormat(val);
m_csvStream << dateStr;
m_dataSize += dateStr.length();
break;
}

case SF_DB_TYPE_TIMESTAMP_LTZ:
case SF_DB_TYPE_TIMESTAMP_NTZ:
case SF_DB_TYPE_TIMESTAMP_TZ:
{
std::string timestampStr = convertTimestampFormat(val, type);
m_csvStream << timestampStr;
m_dataSize += timestampStr.length();
break;
}
m_csvStream << val;
m_dataSize += val.length();
}
else
{
std::string escapeStr(val);
replaceStrAll(escapeStr, "\"", "\"\"");
escapeStr = "\"" + escapeStr + "\"";

default:
{
if (std::string::npos == val.find_first_of("\"\n,\\"))
{
m_csvStream << val;
m_dataSize += val.length();
}
else
{
std::string escapeStr(val);
replaceStrAll(escapeStr, "\"", "\"\"");
escapeStr = "\"" + escapeStr + "\"";

m_csvStream << escapeStr;
m_dataSize += escapeStr.length();
}
break;
}
m_csvStream << escapeStr;
m_dataSize += escapeStr.length();
}
}

Expand Down Expand Up @@ -306,114 +275,5 @@ void BindUploader::addNullValue()
}
}

bool BindUploader::csvGetNextField(std::string& fieldValue,
bool& isNull, bool& isEndOfRow)
{
char c;

// the flag indecate if currently in a quoted value
bool inQuote = false;
// the flag indecate if the value has been quoted, quoted empty string is
// empty value (like ,"",) while unquoted empty string is null (like ,,)
bool quoted = false;
// the flag indecate a value is found to end the loop
bool done = false;
// the flag indicate the next char already fetched by checking double quote escape ("")
bool nextCharFetched = false;

fieldValue.clear();

if (!m_csvStream.get(c))
{
return false;
}

while (!done)
{
switch (c)
{
case ',':
{
if (!inQuote)
{
done = true;
}
else
{
fieldValue.push_back(c);
}
break;
}

case '\n':
{
if (!inQuote)
{
done = true;
isEndOfRow = true;
}
else
{
fieldValue.push_back(c);
}
break;
}

case '\"':
{
if (!inQuote)
{
quoted = true;
inQuote = true;
}
else
{
if (!m_csvStream.get(c))
{
isEndOfRow = true;
done = true;
}
else
{
if (c == '\"')
{
// escape double qoute in quoted string
fieldValue.push_back(c);
}
else
{
inQuote = false;
nextCharFetched = true;
}
}
}

break;
}

default:
{
fieldValue.push_back(c);
}
}

if ((!done) && (!nextCharFetched))
{
if (!m_csvStream.get(c))
{
isEndOfRow = true;
break;
}
}
else
{
nextCharFetched = false;
}
}

isNull = (fieldValue.empty() && !quoted);
return true;
}

} // namespace Client
} // namespace Snowflake
Loading

0 comments on commit 6413c28

Please sign in to comment.