diff options
author | Griffin Smith <grfn@gws.fyi> | 2020-08-09T04·27-0400 |
---|---|---|
committer | glittershark <grfn@gws.fyi> | 2020-08-09T17·26+0000 |
commit | d1653533a6f6f70d1d95001abf3f80665ba135e7 (patch) | |
tree | 35c29ccb38f404848eec2969862c6bd0f0671b43 /third_party/nix/src/tests/references_test.cc | |
parent | dfab786653c24b11a8e9338df29c22fd7a0c4959 (diff) |
test(tvix): Cover scanForReferences in a test r/1627
Aded a few test cases covering the scanForReferences function, which had been accidentally broken in 976a36c (which is now partially-reverted). As part of this, since the test needed to generate hashes for store paths, the logic in MakeStorePath to compress a sha256 hash down to 20 bytes and convert it to base32 has been extracted to a member function on the Hash class. Fixes: #34 Change-Id: Ie2d914688a80f42d0234d351a7cc0714fd15709e Reviewed-on: https://cl.tvl.fyi/c/depot/+/1698 Tested-by: BuildkiteCI Reviewed-by: kanepyork <rikingcoding@gmail.com>
Diffstat (limited to 'third_party/nix/src/tests/references_test.cc')
-rw-r--r-- | third_party/nix/src/tests/references_test.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/third_party/nix/src/tests/references_test.cc b/third_party/nix/src/tests/references_test.cc new file mode 100644 index 000000000000..8dcb3ed37a8b --- /dev/null +++ b/third_party/nix/src/tests/references_test.cc @@ -0,0 +1,74 @@ +#include "libstore/references.hh" + +#include <cstdio> +#include <fstream> +#include <ostream> +#include <unordered_set> + +#include <absl/strings/str_format.h> +#include <gtest/gtest.h> +#include <rapidcheck.h> +#include <rapidcheck/gtest.h> + +#include "libutil/hash.hh" + +class ReferencesTest : public ::testing::Test {}; + +namespace nix { + +TEST(ReferencesTest, ScanForOneReferenceNotFound) { + char path[] = "store_XXXXXXX"; + auto f = mkstemp(path); + + auto hash = hashString(htSHA256, "foo"); + auto ref = absl::StrFormat("/nix/store/%s-foo", hash.ToStorePathHash()); + + HashResult hr; + auto result = scanForReferences(path, {ref}, hr); + + ASSERT_EQ(result.find(ref), result.end()); + + EXPECT_EQ(close(f), 0); +} + +TEST(ReferencesTest, ScanForOneReferenceFound) { + char path[] = "store_XXXXXXX"; + auto f = mkstemp(path); + + auto hash = hashString(htSHA256, "foo"); + auto ref = absl::StrFormat("/nix/store/%s-foo", hash.ToStorePathHash()); + + EXPECT_GT(write(f, ref.c_str(), sizeof(char) * ref.size()), 0); + + HashResult hr; + auto result = scanForReferences(path, {ref}, hr); + + ASSERT_NE(result.find(ref), result.end()); + + ASSERT_EQ(close(f), 0); +} + +RC_GTEST_PROP(ReferencesTest, ScanForReferences, + (std::unordered_set<std::string> strs)) { + char path[] = "store_XXXXXXX"; + auto f = mkstemp(path); + + PathSet refs; + for (const auto& s : strs) { + auto hash = hashString(htSHA256, s); + auto ref = absl::StrFormat("/nix/store/%s-foo", hash.ToStorePathHash()); + refs.insert(ref); + RC_ASSERT(write(f, ref.c_str(), sizeof(char) * ref.size()) > 0); + } + + HashResult hr; + auto result = scanForReferences(path, refs, hr); + + for (const auto& ref : refs) { + RC_ASSERT(result.find(ref) != result.end()); + } + + RC_ASSERT(close(f) == 0); +} + +} // namespace nix |