Exemple #1
0
    def testDigestEnvRotation(self):
        """Rotating characters between key-value pairs must be detected"""
        s1 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
                              digestEnv=Env({
                                  "a": "bc",
                                  "cd": "e"
                              }))
        s2 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
                              digestEnv=Env({
                                  "a": "bcc",
                                  "d": "e"
                              }))
        assert s1.variantId != s2.variantId

        s1 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
                              digestEnv=Env({
                                  "a": "bb",
                                  "c": "dd",
                                  "e": "ff"
                              }))
        s2 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
                              digestEnv=Env({
                                  "a": "bbc=dd",
                                  "e": "ff"
                              }))
        assert s1.variantId != s2.variantId
Exemple #2
0
 def testDigestFullEnv(self):
     """Full env does not change digest. It is only used for SCMs."""
     s1 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
         Env({"a" : "asdf", "q": "qwer" }), Env({ "a" : "asdf" }))
     s2 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
         Env(), Env({ "a" : "asdf" }))
     assert s1.variantId == s2.variantId
Exemple #3
0
 def testDigestStable(self):
     """Same input should yield same digest"""
     s1 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
         Env({"a" : "asdf", "q": "qwer" }), Env({ "a" : "asdf" }))
     s2 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
         Env({"a" : "asdf", "q": "qwer" }), Env({ "a" : "asdf" }))
     assert s1.variantId == s2.variantId
Exemple #4
0
 def testDigestEmpyEnv(self):
     """Adding empty entry must be detected"""
     s1 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
         digestEnv=Env({ "a" : "b" }))
     s2 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
         digestEnv=Env({ "a" : "b", "" : "" }))
     assert s1.variantId != s2.variantId
Exemple #5
0
 def testDigestScriptChange(self):
     """Script does influnce the digest"""
     s1 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
         Env({"a" : "asdf", "q": "qwer" }), Env({ "a" : "asdf" }))
     evilPkg = MockCorePackage(checkoutScript="evil", checkoutDigestScript="other digest")
     s2 = CoreCheckoutStep(evilPkg, ("evil", "other digest", [], []), [],
         Env({"a" : "asdf", "q": "qwer" }), Env({ "a" : "asdf" }))
     assert s1.variantId != s2.variantId
Exemple #6
0
    def testDigestTools(self):
        """Tools must influence digest"""

        t1 = Empty()
        t1.coreStep = Empty()
        t1.coreStep.variantId = b'0123456789abcdef'
        t1.coreStep.isDeterministic = lambda: True
        t1.path = "p1"
        t1.libs = []

        p1 = MockCorePackage(tools={"a": t1})
        s1 = CoreCheckoutStep(p1, ("script", "digest", [], []))

        # tool name has no influence
        p2 = MockCorePackage(tools={"zz": t1})
        s2 = CoreCheckoutStep(p2, ("script", "digest", [], []))
        assert s1.variantId == s2.variantId

        # step digest change
        t2 = Empty()
        t2.coreStep = Empty()
        t2.coreStep.variantId = b'0123456789000000'
        t2.coreStep.isDeterministic = lambda: True
        t2.path = "p1"
        t2.libs = []

        p2 = MockCorePackage(tools={"a": t2})
        s2 = CoreCheckoutStep(p2, ("script", "digest", [], []))
        assert s1.variantId != s2.variantId

        # path change
        t2.coreStep.variantId = b'0123456789abcdef'
        t2.path = "foo"
        t2.libs = []

        s2 = CoreCheckoutStep(p2, ("script", "digest", [], []))
        assert s1.variantId != s2.variantId

        # libs change
        t2.coreStep.getVariantId = b'0123456789abcdef'
        t2.path = "p1"
        t2.libs = ["asdf"]

        s2 = CoreCheckoutStep(p2, ("script", "digest", [], []))
        assert s1.variantId != s2.variantId
Exemple #7
0
    def testDigestEnv(self):
        """Env changes digest"""
        s1 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
            digestEnv=Env({ "a" : "asdf" }))

        # different value
        s2 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
            digestEnv=Env({ "a" : "qwer" }))
        assert s1.variantId != s2.variantId

        # added entry
        s2 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
            digestEnv=Env({ "a" : "asdf", "b" : "qwer" }))
        assert s1.variantId != s2.variantId

        # removed entry
        s2 = CoreCheckoutStep(nullPkg, ("script", "digest", [], []), [],
            digestEnv=Env())
        assert s1.variantId != s2.variantId
Exemple #8
0
 def testTrivialInvalid(self):
     """Trivial steps are invalid"""
     s = CoreCheckoutStep(nullPkg).refDeref([], {}, None, nullFmt)
     assert s.isValid() == False
Exemple #9
0
 def testTrivialDeterministic(self):
     """Trivial steps are deterministic"""
     s = CoreCheckoutStep(nullPkg).refDeref([], {}, None, nullFmt)
     assert s.isDeterministic()
Exemple #10
0
 def testStereotype(self):
     """Check that the CheckoutStep identifies itself correctly"""
     s = CoreCheckoutStep(nullPkg).refDeref([], {}, None, nullFmt)
     assert s.isCheckoutStep() == True
     assert s.isBuildStep() == False
     assert s.isPackageStep() == False
Exemple #11
0
 def testTrivialInvalid(self):
     """Trivial steps are invalid"""
     s = CoreCheckoutStep(nullPkg).refDeref([], {}, None, nullFmt)
     assert s.isValid() == False
Exemple #12
0
 def testTrivialDeterministic(self):
     """Trivial steps are deterministic"""
     s = CoreCheckoutStep(nullPkg).refDeref([], {}, None, nullFmt)
     assert s.isDeterministic()
Exemple #13
0
 def testStereotype(self):
     """Check that the CheckoutStep identifies itself correctly"""
     s = CoreCheckoutStep(nullPkg).refDeref([], {}, None, nullFmt)
     assert s.isCheckoutStep() == True
     assert s.isBuildStep() == False
     assert s.isPackageStep() == False