This is an automated email from the ASF dual-hosted git repository. alexey pushed a commit to branch branch-1.18.x in repository https://gitbox.apache.org/repos/asf/kudu.git
commit a969b28482d9672b189150259483795f0697d89d Author: Alexey Serbin <[email protected]> AuthorDate: Tue Dec 10 15:27:54 2024 -0800 [jwt] do not leak temporary test file Prior to this patch, many temporary files would be left under /tmp directory after running jwt-util-test. This patch addresses the issue. Change-Id: I52481670ba4e20a1b33f777eebf8d3fe618f873f Reviewed-on: http://gerrit.cloudera.org:8080/22194 Tested-by: Kudu Jenkins Reviewed-by: Zoltan Chovan <[email protected]> Reviewed-by: Abhishek Chennaka <[email protected]> (cherry picked from commit e1e7079e7541559c34742cb311ba806f35efbd54) Reviewed-on: http://gerrit.cloudera.org:8080/22199 Tested-by: Alexey Serbin <[email protected]> --- src/kudu/util/jwt-util-test.cc | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/kudu/util/jwt-util-test.cc b/src/kudu/util/jwt-util-test.cc index a6e1cf341..c5dd93fff 100644 --- a/src/kudu/util/jwt-util-test.cc +++ b/src/kudu/util/jwt-util-test.cc @@ -62,10 +62,11 @@ using kudu::MiniOidc; /// Utility class for creating a file that will be automatically deleted upon test /// completion. -class TempTestDataFile { +class TempTestDataFile final { public: // Creates a temporary file with the specified contents. explicit TempTestDataFile(const std::string& contents); + ~TempTestDataFile(); /// Returns the absolute path to the file. const std::string& Filename() const { return name_; } @@ -75,23 +76,35 @@ class TempTestDataFile { std::unique_ptr<WritableFile> tmp_file_; }; -TempTestDataFile::TempTestDataFile(const std::string& contents) - : name_("/tmp/jwks_XXXXXX") { - string created_filename; +TempTestDataFile::TempTestDataFile(const std::string& contents) { + static const string cNamePattern = "/tmp/jwks_XXXXXX"; WritableFileOptions opts; opts.is_sensitive = false; - Status status; - status = Env::Default()->NewTempWritableFile(opts, &name_[0], &created_filename, &tmp_file_); - if (!status.ok()) { - std::cerr << Substitute("Error creating temp file: $0", created_filename); + string fname; + if (auto s = Env::Default()->NewTempWritableFile( + opts, cNamePattern, &fname, &tmp_file_); !s.ok()) { + std::cerr << Substitute("error creating temp file '$0': $1", + fname, s.ToString()); } - status = WriteStringToFile(Env::Default(), contents, created_filename); - if (!status.ok()) { - std::cerr << Substitute("Error writing contents to temp file: $0", created_filename); + if (auto s = WriteStringToFile(Env::Default(), contents, fname); + !s.ok()) { + std::cerr << Substitute("error writing into temp file '$0': $1", + fname, s.ToString()); } - name_ = created_filename; + name_ = fname; +} + +TempTestDataFile::~TempTestDataFile() { + if (tmp_file_) { + // Remove the temporary file from the filesystem. The destructor + // of the 'tmp_file_' field takes care of closing the file. + if (auto s = Env::Default()->DeleteFile(name_); !s.ok()) { + std::cerr << Substitute("error removing temp file '$0': $1", + name_, s.ToString()); + } + } } TEST(JwtUtilTest, LoadJwksFile) {
