at master 4.4 kB view raw
1# This needs to be run in a NixOS test, because Hydra cannot do IFD. 2let 3 pkgs = import ../../.. { }; 4 inherit (pkgs) 5 runCommand 6 writeShellScriptBin 7 replaceDependency 8 replaceDependencies 9 ; 10 inherit (pkgs.lib) escapeShellArg; 11 mkCheckOutput = 12 name: test: output: 13 runCommand name { } '' 14 actualOutput="$(${escapeShellArg "${test}/bin/test"})" 15 if [ "$(${escapeShellArg "${test}/bin/test"})" != ${escapeShellArg output} ]; then 16 echo >&2 "mismatched output: expected \""${escapeShellArg output}"\", got \"$actualOutput\"" 17 exit 1 18 fi 19 touch "$out" 20 ''; 21 oldDependency = writeShellScriptBin "dependency" '' 22 echo "got old dependency" 23 ''; 24 oldDependency-ca = oldDependency.overrideAttrs { __contentAddressed = true; }; 25 newDependency = writeShellScriptBin "dependency" '' 26 echo "got new dependency" 27 ''; 28 newDependency-ca = newDependency.overrideAttrs { __contentAddressed = true; }; 29 basic = writeShellScriptBin "test" '' 30 ${oldDependency}/bin/dependency 31 ''; 32 basic-ca = writeShellScriptBin "test" '' 33 ${oldDependency-ca}/bin/dependency 34 ''; 35 transitive = writeShellScriptBin "test" '' 36 ${basic}/bin/test 37 ''; 38 weirdDependency = writeShellScriptBin "dependency" '' 39 echo "got weird dependency" 40 ${basic}/bin/test 41 ''; 42 oldDependency1 = writeShellScriptBin "dependency1" '' 43 echo "got old dependency 1" 44 ''; 45 newDependency1 = writeShellScriptBin "dependency1" '' 46 echo "got new dependency 1" 47 ''; 48 oldDependency2 = writeShellScriptBin "dependency2" '' 49 ${oldDependency1}/bin/dependency1 50 echo "got old dependency 2" 51 ''; 52 newDependency2 = writeShellScriptBin "dependency2" '' 53 ${oldDependency1}/bin/dependency1 54 echo "got new dependency 2" 55 ''; 56 deep = writeShellScriptBin "test" '' 57 ${oldDependency2}/bin/dependency2 58 ''; 59in 60{ 61 replacedependency-basic = mkCheckOutput "replacedependency-basic" (replaceDependency { 62 drv = basic; 63 inherit oldDependency newDependency; 64 }) "got new dependency"; 65 66 replacedependency-basic-old-ca = mkCheckOutput "replacedependency-basic" (replaceDependency { 67 drv = basic-ca; 68 oldDependency = oldDependency-ca; 69 inherit newDependency; 70 }) "got new dependency"; 71 72 replacedependency-basic-new-ca = mkCheckOutput "replacedependency-basic" (replaceDependency { 73 drv = basic; 74 inherit oldDependency; 75 newDependency = newDependency-ca; 76 }) "got new dependency"; 77 78 replacedependency-transitive = mkCheckOutput "replacedependency-transitive" (replaceDependency { 79 drv = transitive; 80 inherit oldDependency newDependency; 81 }) "got new dependency"; 82 83 replacedependency-weird = 84 mkCheckOutput "replacedependency-weird" 85 (replaceDependency { 86 drv = basic; 87 inherit oldDependency; 88 newDependency = weirdDependency; 89 }) 90 '' 91 got weird dependency 92 got old dependency''; 93 94 replacedependencies-precedence = mkCheckOutput "replacedependencies-precedence" (replaceDependencies 95 { 96 drv = basic; 97 replacements = [ { inherit oldDependency newDependency; } ]; 98 cutoffPackages = [ oldDependency ]; 99 } 100 ) "got new dependency"; 101 102 replacedependencies-self = mkCheckOutput "replacedependencies-self" (replaceDependencies { 103 drv = basic; 104 replacements = [ 105 { 106 inherit oldDependency; 107 newDependency = oldDependency; 108 } 109 ]; 110 }) "got old dependency"; 111 112 replacedependencies-deep-order1 = 113 mkCheckOutput "replacedependencies-deep-order1" 114 (replaceDependencies { 115 drv = deep; 116 replacements = [ 117 { 118 oldDependency = oldDependency1; 119 newDependency = newDependency1; 120 } 121 { 122 oldDependency = oldDependency2; 123 newDependency = newDependency2; 124 } 125 ]; 126 }) 127 '' 128 got new dependency 1 129 got new dependency 2''; 130 131 replacedependencies-deep-order2 = 132 mkCheckOutput "replacedependencies-deep-order2" 133 (replaceDependencies { 134 drv = deep; 135 replacements = [ 136 { 137 oldDependency = oldDependency2; 138 newDependency = newDependency2; 139 } 140 { 141 oldDependency = oldDependency1; 142 newDependency = newDependency1; 143 } 144 ]; 145 }) 146 '' 147 got new dependency 1 148 got new dependency 2''; 149}