From 507e8dee9c6467325d46faef6dc76900733ea85b Mon Sep 17 00:00:00 2001 From: jikai Date: Tue, 30 Jan 2024 13:21:14 +0800 Subject: [PATCH 198/198] improve dt for default ulimit change Signed-off-by: jikai --- CI/test_cases/container_cases/ulimit.sh | 19 ++++++ test/specs/specs/specs_ut.cc | 80 ++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/CI/test_cases/container_cases/ulimit.sh b/CI/test_cases/container_cases/ulimit.sh index f823dc1c..41cdcece 100755 --- a/CI/test_cases/container_cases/ulimit.sh +++ b/CI/test_cases/container_cases/ulimit.sh @@ -49,9 +49,28 @@ function test_ulimit() [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - restart failed" && ((ret++)) cat ${RUNTIME_ROOT_PATH}/${runtime}/$cid/config.json | grep "RLIMIT_" [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - check rlimit failed after restart" && ((ret++)) + + check_valgrind_log + [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - stop isulad failed" && ((ret++)) + + start_isulad_with_valgrind + [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - start isulad failed" && ((ret++)) + + # if default ulimit of isulad changed, isula start should do update ulimit of oci spec + isula restart -t 0 $cid + [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - restart failed" && ((ret++)) + cat ${RUNTIME_ROOT_PATH}/${runtime}/$cid/config.json | grep "RLIMIT_" + [[ $? -eq 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - check rlimit failed after restart" && ((ret++)) + isula rm -f $cid [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - rm container failed" && ((ret++)) + check_valgrind_log + [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - stop isulad failed" && ((ret++)) + + start_isulad_with_valgrind --default-ulimit nproc=2048:4096 --default-ulimit nproc=2048:8192 --default-ulimit nofile=1024:4096 + [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - start isulad failed" && ((ret++)) + isula run --ulimit nproc= $image --runtime $runtime /bin/sh > $ulimitlog 2>&1 cat $ulimitlog | grep "delimiter '=' can't be the first or the last character" [[ $? -ne 0 ]] && msg_err "${FUNCNAME[0]}:${LINENO} - check failed" && ((ret++)) diff --git a/test/specs/specs/specs_ut.cc b/test/specs/specs/specs_ut.cc index 8fbaa337..d5105f43 100644 --- a/test/specs/specs/specs_ut.cc +++ b/test/specs/specs/specs_ut.cc @@ -273,6 +273,32 @@ char *invoke_conf_get_isulad_cgroup_parent() return util_strdup_s("/var/lib/isulad/engines/lcr"); } +int invoke_conf_get_isulad_default_ulimit_empty(host_config_ulimits_element ***ulimit) +{ + if (ulimit == nullptr) { + return -1; + } + return 0; +} + +int invoke_conf_get_isulad_default_ulimit(host_config_ulimits_element ***ulimit) +{ + if (ulimit == nullptr) { + return -1; + } + host_config_ulimits_element *ele = static_cast(util_common_calloc_s(sizeof(host_config_ulimits_element))); + if (ele == nullptr) { + return -1; + } + ele->hard = 8192; + ele->soft = 2048; + ele->name = util_strdup_s("NPROC"); + + int ret = ulimit_array_append(ulimit, ele, ulimit_array_len(*ulimit)); + free_host_config_ulimits_element(ele); + return ret; +} + TEST_F(SpecsUnitTest, test_merge_container_cgroups_path_1) { ASSERT_EQ(merge_container_cgroups_path(nullptr, nullptr), nullptr); @@ -366,7 +392,59 @@ TEST_F(SpecsUnitTest, test_merge_container_cgroups_path_5) testing::Mock::VerifyAndClearExpectations(&m_isulad_conf); } -TEST_F(SpecsUnitTest, SpecsUnitTest_test_update_devcies_for_oci_spec) +TEST_F(SpecsUnitTest, test_update_oci_container_cgroups_path) +{ + parser_error err = nullptr; + host_config *hostspec = static_cast(util_common_calloc_s(sizeof(host_config))); + ASSERT_NE(hostspec, nullptr); + + oci_runtime_spec *ocispec = oci_runtime_spec_parse_data("{\"ociVersion\": \"1.0.1\", \"linux\": \ + {} }", nullptr, &err); + ASSERT_NE(ocispec, nullptr); + + ocispec->linux->cgroups_path = util_strdup_s("/isulad"); + ASSERT_EQ(update_oci_container_cgroups_path("abcdef", nullptr, nullptr), -1); + EXPECT_CALL(m_isulad_conf, GetCgroupParent()).WillRepeatedly(Invoke(invoke_conf_get_isulad_cgroup_parent)); + ASSERT_EQ(update_oci_container_cgroups_path("abcdef", ocispec, hostspec), 0); + ASSERT_STREQ(ocispec->linux->cgroups_path, "/var/lib/isulad/engines/lcr/abcdef"); + + free(err); + free_host_config(hostspec); + free_oci_runtime_spec(ocispec); + + testing::Mock::VerifyAndClearExpectations(&m_isulad_conf); +} + +TEST_F(SpecsUnitTest, test_update_oci_ulimit) +{ + parser_error err = nullptr; + host_config *hostspec = static_cast(util_common_calloc_s(sizeof(host_config))); + ASSERT_NE(hostspec, nullptr); + + char *oci_config_file = json_path(OCI_RUNTIME_SPEC_FILE); + ASSERT_TRUE(oci_config_file != nullptr); + oci_runtime_spec *ocispec = oci_runtime_spec_parse_file(oci_config_file, nullptr, &err); + ASSERT_NE(ocispec, nullptr); + + ASSERT_EQ(update_oci_ulimit(nullptr, nullptr), -1); + EXPECT_CALL(m_isulad_conf, GetUlimit(_)).WillRepeatedly(Invoke(invoke_conf_get_isulad_default_ulimit)); + ASSERT_EQ(update_oci_ulimit(ocispec, hostspec), 0); + ASSERT_EQ(ocispec->process->rlimits_len, 1); + ASSERT_EQ(ocispec->process->rlimits[0]->hard, 8192); + ASSERT_EQ(ocispec->process->rlimits[0]->soft, 2048); + ASSERT_STREQ(ocispec->process->rlimits[0]->type, "RLIMIT_NPROC"); + EXPECT_CALL(m_isulad_conf, GetUlimit(_)).WillRepeatedly(Invoke(invoke_conf_get_isulad_default_ulimit_empty)); + ASSERT_EQ(update_oci_ulimit(ocispec, hostspec), 0); + ASSERT_EQ(ocispec->process->rlimits_len, 0); + + free(err); + free(oci_config_file); + free_host_config(hostspec); + free_oci_runtime_spec(ocispec); + testing::Mock::VerifyAndClearExpectations(&m_isulad_conf); +} + +TEST_F(SpecsUnitTest, test_update_devcies_for_oci_spec) { parser_error err = nullptr; oci_runtime_spec *readonly_spec = oci_runtime_spec_parse_data("{\"ociVersion\": \"1.0.1\", \"linux\": \ -- 2.25.1