test(3p/nix): Add test for derivation parse/serialize

Add a rapidcheck test covering roundtrip parse and serialize for Nix
derivations. This covers a bug we discovered in ef54f5d which broke this
roundtrip.

Change-Id: I72d140334b5f24f79e82e34f98609c695dbfbf93
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1582
Tested-by: BuildkiteCI
Reviewed-by: kanepyork <rikingcoding@gmail.com>
This commit is contained in:
Griffin Smith 2020-08-02 13:28:28 -04:00 committed by glittershark
parent 7aebba7531
commit cc82d6e360
4 changed files with 121 additions and 2 deletions

View file

@ -144,7 +144,7 @@ static StringSet parseStrings(std::istream& str, bool arePaths) {
return res;
}
static Derivation parseDerivation(const std::string& s) {
Derivation parseDerivation(const std::string& s) {
Derivation drv;
istringstream_nocopy str(s);
expect(str, "Derive([");

View file

@ -16,10 +16,10 @@ const std::string drvExtension = ".drv";
struct DerivationOutput {
Path path;
// TODO(grfn): make these two fields a Hash
std::string hashAlgo; /* hash used for expected hash computation */
std::string hash; /* expected hash, may be null */
DerivationOutput() {}
// TODO(grfn): Make explicit
DerivationOutput(Path path, std::string hashAlgo, std::string hash) {
this->path = path;
this->hashAlgo = hashAlgo;
@ -92,6 +92,8 @@ Path writeDerivation(const ref<Store>& store, const Derivation& drv,
/* Read a derivation from a file. */
Derivation readDerivation(const Path& drvPath);
Derivation parseDerivation(const std::string& s);
/* Check whether a file name ends with the extension for
derivations. */
bool isDerivation(const std::string& fileName);