| // 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 <dirent.h> | |
| #include <errno.h> | |
| #include <unistd.h> | |
| #include <string> | |
| #include "src/tools/singlejar/input_jar.h" | |
| #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 |