|
| 1 | +Code.require_file "../test_helper.exs", __DIR__ |
| 2 | + |
| 3 | +defmodule Mix.LocalTest do |
| 4 | + use MixTest.Case, async: true |
| 5 | + |
| 6 | + # openssl rsa -in elixirest.pem -pubout > elixirest.pub |
| 7 | + @public_key """ |
| 8 | + -----BEGIN PUBLIC KEY----- |
| 9 | + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA37moKP1dGGLhsP3d8Fwv |
| 10 | + W25SoYZUY2K+Iq7A0OBV36Rnb8yW3BWjfh5YtmPvUCfYUbNCW2HTMMgBntkQ4YmN |
| 11 | + B9tHVZazl2uX9lGCfZZPFc/9umvKRojCPkMN81MfTxqnY0oaLHr6DB86RsWHB+ld |
| 12 | + 782Xf+nd9q3LFdUl8SGlKX7uzfVWd4EWYNcL7aLeLSupZWeNg8uVmY3zua0EgIlQ |
| 13 | + XryalIOZb/R+pwprWZoftCl+20FGYi/mJpo/idFtXsR0sJKF4X0W3NORT9RIRbs9 |
| 14 | + WdjiFi+eIP7Nm8KSF4pbaXCqSmVf9cgvUuGTxc9/P5GcIPAlkcsSrE5peLyUCk5f |
| 15 | + 2QIDAQAB |
| 16 | + -----END PUBLIC KEY----- |
| 17 | + """ |
| 18 | + |
| 19 | + # openssl genrsa -aes256 -out elixirtest.pem -passout stdin 2048 |
| 20 | + @private_key """ |
| 21 | + -----BEGIN RSA PRIVATE KEY----- |
| 22 | + Proc-Type: 4,ENCRYPTED |
| 23 | + DEK-Info: AES-256-CBC,48BA5153DA2F120ECE063B33C1204A49 |
| 24 | +
|
| 25 | + 5gp3daNWujH7o9S/dJQEt9TYTRP0pPZtU55PlZrzWt52optr7XHW/ENOm84g5J70 |
| 26 | + QCPELp12jfQsNiPwbVWXKy2zD3QlNiAelf65hqLWJTWli7XIXfdP46VXOu67OKf9 |
| 27 | + Ziw4HQ+AdBEwFt20wJst77iy17sNlyxp5DhNDonnSizzIowgUAJkoNI5aBUU6D8X |
| 28 | + KTSIftZW35Z4SudkazdoHepEfItZTI8mB4rvfn71Q4oOBA1rAuUUmdPWoPBfUHDa |
| 29 | + hvIp2T2Q8zZYqm0+SjDxZUYOOreE7fuf5NSLhHHt7+jyWQmtaVxnOWms72G+9xT0 |
| 30 | + NGmOEB0WEg1kBsUbYOXXwyCAZhNA6MaKCtgjQczRTK+geS1xNaFc9FDEk3ZjN4Z8 |
| 31 | + PxrKQoqo+2aQGVcatZWCom80Dci3bIv7iZNA/y1rjfBn+MeitMOGscP7/CBrJAbI |
| 32 | + bh1mvCu0McSnqlN0a+EuCVfJQYFMzjibpRVzKAST0QeaxXd5QxHfcPFPBLOpiVWc |
| 33 | + NjHaZsHORyoJbUKGA4rgOiSB63mv7SDRA2mvxWpwV/+6MuwBah6t6CGoEsAr1Hbn |
| 34 | + 1ySt5w27bw3QEf2KTiuxDubo8UrF0eYzP5A9MH8vRpSRZHg8T3SBVfPJ/pM16Lnn |
| 35 | + 5BaMUdxDFJeet5HUYoke9Zm3udh2BvwGiKhzc9Pbw/EcsCcvChMimRTasqTaRf+S |
| 36 | + uIm0Un7o+7kTuvBo2y87j2urCEUzft5QqEynbkR7p3vZnwoLLj+supXh3V8ivW4s |
| 37 | + Z6ql+ukRcWd/ode+lbSiYfAJCLc1tCqJ3kTnMnADJBlL0TX7YnwBwWuwwPuZgeAv |
| 38 | + F6nnBE1SBQ1WK+bjSVzIqmNFqsZw34wgpnz2heX0q8msF5pzd6EIeA+uz86k8XYh |
| 39 | + 4eVZYGXxa4Exodh/MqEpRuN1ytWDXvHULh0gml7xwZC3R50UD8uBNt5RGjXUkjXc |
| 40 | + V0atKuvgzVlsB4xbDhVP7EVYHBF02NfNOsvo7kh0Yl1IcT/42UaCGYuU1o9zotPv |
| 41 | + 9b3SHz/HOmBVj2uCdR5XZ4EolP5Iv9vqIDt9DsuDpOyO+AFOww0FnJNCQ1Hmfb0T |
| 42 | + qBYPv994oSPYLCGR4a8i/xfmmV8KbAIVEgK3AMbz8RxKr3WBWXWnzQdr4+y4EG24 |
| 43 | + hSnR52XQ42edv/fkqf9ez+fKNQ9i7PtlPE96Q21NeLMNKHh43X8hJFDh+oPz3Aio |
| 44 | + YSNMCZnoyRdrjBRCsVBpnyoLmuhWwG9RlcrEj3G0BxYPh/weaBOAKAHjSr28yuUj |
| 45 | + yIa8uddszC6XHSiVUgu7SGO8gQmq++eNdckjX/pEug5MjcWLUqaUg6+YLFWY6NLf |
| 46 | + uDPOYuivq7ErtKTvP2xl3TBEDKhdfqxA2+RFxbBDmKjffZnRkcknQsxhlzAdbg22 |
| 47 | + Jwa2B1nrfjJpX5F+1Av2jHQGbIKMqZzv8fo1binMKpptFzokbWEOjcPCb3tPuomG |
| 48 | + ZRkW3qO2pdyYX2N7VXYG9tGi2HrN/oFrWnHPoYF23v85V8WxNkODOCpTz85e6R5v |
| 49 | + PVu+FCNFj5weEOTRhtEQyJo7mU5qIRwYeZvVxiC6W+XeFs95wdBE/Lvpg8yZ8D9d |
| 50 | + -----END RSA PRIVATE KEY----- |
| 51 | + """ |
| 52 | + |
| 53 | + @csv """ |
| 54 | + 1.2.5,ABC,0.9.0 |
| 55 | + 1.2.3,DEF,1.0.0 |
| 56 | + 1.2.4,GHI,1.0.0 |
| 57 | + """ |
| 58 | + |
| 59 | + # openssl dgst -sha512 -sign elixirtest.pem hex-1.x.csv | openssl base64 > elixirtest.csv.signed |
| 60 | + @csv_signed """ |
| 61 | + VRydmXOdEXQcKJu/SK/nKnE00T+s/T4mpXrYROMSXhD/s8ClvdimnGg61ie3YBS6 |
| 62 | + LXOjlEhbtMHRM2rTOUvv4z7FcyzwvSxSjunlVi2g3c1pVOZ78MonnYhGb44tZw/q |
| 63 | + SOVmV+jJhc9EZFMIAAM3plMoyssyw2pMh7ZB/DxCQTIem3Qf0Ujzc2bYkLVlw7R+ |
| 64 | + 1Rn6dcYEgCzyldVkAUMaYBwieyweWALA+YVDCMudJJK2J7p1OnuoPSVV+N3OkB/Z |
| 65 | + T6Jj5ljD+54XnuxAMcgCoF9lpOwXscnw/Ma+8JqIoWo0jNFE3ji+8dGCUzQUdSe8 |
| 66 | + llLXgJJE2tGpDhEXBA3idg== |
| 67 | + """ |
| 68 | + |
| 69 | + setup_all do |
| 70 | + File.mkdir_p!(Mix.PublicKey.public_keys_path) |
| 71 | + |
| 72 | + Path.join(Mix.PublicKey.public_keys_path, "test_key.pub") |
| 73 | + |> File.write!(@public_key) |
| 74 | + end |
| 75 | + |
| 76 | + test "select correct versions from csv" do |
| 77 | + in_tmp "select correct versions from csv", fn -> |
| 78 | + File.write!("csv", @csv) |
| 79 | + File.write!("csv.signed", @csv_signed) |
| 80 | + |
| 81 | + assert {"1.0.0", "1.2.4", "GHI"} = |
| 82 | + Mix.Local.find_matching_versions_from_signed_csv!("name", "csv") |
| 83 | + end |
| 84 | + end |
| 85 | + |
| 86 | + test "raise on bad signature" do |
| 87 | + in_tmp "raise on bad signature", fn -> |
| 88 | + csv_signed = String.replace(@csv_signed, "VRy", "BAD") |
| 89 | + File.write!("csv", @csv) |
| 90 | + File.write!("csv.signed", csv_signed) |
| 91 | + |
| 92 | + assert_raise Mix.Error, fn -> |
| 93 | + Mix.Local.find_matching_versions_from_signed_csv!("name", "csv") |
| 94 | + end |
| 95 | + end |
| 96 | + end |
| 97 | +end |
0 commit comments