// Copyright 2016 The Bazel Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include #include #include #include #include "src/tools/singlejar/input_jar.h" #include "googletest/include/gtest/gtest.h" namespace { static const char kJarsDirPath[] = "third_party/bazel/src/tools/singlejar/jars_to_test"; TEST(InputJarRandomJarsTest, ScanAllJars) { int processed_jars = 0; DIR *dirp = opendir(kJarsDirPath); ASSERT_NE(nullptr, dirp); struct dirent *dirent; InputJar input_jar; while ((dirent = readdir(dirp)) != nullptr) { if (dirent->d_type != DT_REG && dirent->d_type != DT_LNK) { continue; } std::string path = std::string(kJarsDirPath) + "/" + dirent->d_name; if (dirent->d_type == DT_LNK) { struct stat st; if (stat(path.c_str(), &st)) { perror(path.c_str()); continue; } else if (!S_ISREG(st.st_mode)) { continue; } } EXPECT_TRUE(input_jar.Open(path)); const LH *lh; const CDH *cdh; int file_count = 0; int entry_count = 0; for (; (cdh = input_jar.NextEntry(&lh)); ++entry_count) { ASSERT_TRUE(cdh->is()); ASSERT_NE(nullptr, lh); ASSERT_TRUE(lh->is()); EXPECT_EQ(lh->file_name_string(), cdh->file_name_string()); if ('/' != lh->file_name()[lh->file_name_length() - 1]) { ++file_count; } } input_jar.Close(); fprintf(stderr, "%s: %d files, %d entries\n", dirent->d_name, file_count, entry_count); ++processed_jars; } closedir(dirp); EXPECT_LT(0, processed_jars); } } // namespace