Skip to content

Commit 9977abb

Browse files
committed
fix ssh-key-related tests
- replace private.ppk since github killed it - encode private.ppk so github won't flag it again - drop win32 sha1 rsa test since we don't a have a key that github allows this - update pageant because why not - add docs on test keys because I just had figure all this out myself
1 parent 7404623 commit 9977abb

File tree

12 files changed

+73
-87
lines changed

12 files changed

+73
-87
lines changed

.github/workflows/tests.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,16 @@ jobs:
161161
run: npm install
162162

163163
- name: Test
164+
# need arm64 runners or an emulator to run tests
164165
if: matrix.arch != 'arm64'
165166
env:
166167
GIT_SSH: ${{ github.workspace }}\vendor\plink.exe
167168
run: |
168-
powershell -command "Start-Process ${{ github.workspace }}\vendor\pageant.exe ${{ github.workspace }}\vendor\private.ppk"
169+
$encodedKey = Get-Content -Path test\private.ppk.enc
170+
$finalPath = Join-Path -Path $HOME -ChildPath .ssh_tests\private.ppk
171+
mkdir ~\.ssh_tests
172+
Set-Content -Value $([System.Convert]::FromBase64String($encodedKey)) -Path $finalPath -AsByteStream
173+
powershell -command "Start-Process .\vendor\pageant\pageant_${{ matrix.arch }}.exe $finalPath"
169174
node utils/retry npm test
170175
171176
# You're probably wondering why this isn't a single `run: |` step, it certainly is for *nix,

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@ jsconfig.json
4848

4949
test/id_rsa
5050
test/nodegit-test-rsa
51+
test/private.ppk

test/README.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,20 @@ Unit tests for NodeGit.
1717
Test utilities with garbage collector, index, and repository setup, that can be used in tests.
1818

1919

20-
## Note
21-
\*.enc are encrypted in base64 and unencrypted before the test suite runs as \*.
20+
## Keys
21+
22+
Note: all files are encoded in base64 in `\*.enc` and decoded before the test suite runs.
23+
24+
### encrypted_rsa
25+
- passphrase "test-password"
26+
- registered as deploy key on [nodegit/test](https://github.com/nodegit/test) repo named "Encrypted test key"
27+
28+
### id_rsa
29+
- registered as deploy key on [nodegit/test](https://github.com/nodegit/test) repo named "Unencrypted Test Key"
30+
31+
### private.ppk
32+
- same key as id_rsa
33+
- ppk format is used by putty/pageant and converted/generated by puttygen
34+
35+
### nodegit-test-rsa
36+
- registered as deploy key on [nodegit/private](https://github.com/nodegit/private) repo named "Tests"

test/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ function unencryptKey(fileName) {
4040
.toString('ascii');
4141
fs.writeFileSync(path.join(__dirname, fileName), asciiContents, 'utf8');
4242
}
43+
44+
unencryptKey('private.ppk');
4345
unencryptKey('id_rsa');
4446
unencryptKey('nodegit-test-rsa');
4547

test/private.ppk.enc

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
UHVUVFktVXNlci1LZXktRmlsZS0zOiBzc2gtcnNhCkVuY3J5cHRpb246IG5vbmUKQ29tbWVudDog
2+
bm9uYW1lClB1YmxpYy1MaW5lczogMTIKQUFBQUIzTnphQzF5YzJFQUFBQURBUUFCQUFBQ0FRQ3dP
3+
Y0VONis1Vkx2VXBQSGp3WnNiMHZIUEJBRzcxUmV5YwovQzAyMkhDWENJV05mOUwxSWduR25nSWU0
4+
OXdxdGUvWXFyYm5xMHVqOXlrSjE4Nm1GZHdoeUtBNUR2dm5SM1FmClQ5OG12VE94bnpDTUJ1QlU3
5+
M002UEpDYTZVekpoeXhtTjNVTU1uanEvU25oN3hycVdkYW1YQ2ROS3hRL0QxUlkKVXEzVGdLbnBI
6+
bGxhSEI0dnoydHZvRXpBY0dzZ014aFZ4NWdoZ1YxT1Y1NzNYNFVDRXA1UVJNNHJ2WE9KMDRDLwpn
7+
Mzl5KzFNQnladUpveno4OHBaUFg4UFVISGJOemFWd2JCeDFVRnVJdFVGeGo3WkRGK3hubDdTTDBl
8+
RW0vc0dxClh3akhVenJlSmgwQXpZQUNYRVYwd3czZ0xSQ1pmSDEwa3RLMVlTcTFhQ0Vld1Z3MHNu
9+
TUl3cjNSMkFjZkR5K0QKM1dhMXd0WGxNb3lDaTFhRUhwdmd1OFVOQWhteDdJVy9pcEdEZHcyaGQ0
10+
OVh1ZUh2MjVwaHI4S1ROdVRnWmdMNgpXYkVQckFSM3dieHp6QXJ5dmJEbWJ4N1RSbUNRQVJxZlA5
11+
MTlDQmF5MmwyUGgvNDFDNFJZV3pPeUxHS1F3bzFXCnRwbk9FVnBPRTRLYmRNK3g5dzBxQndEdTVa
12+
TnRqcGd6WlBrbVBSSzhZU2NtUkRkSDRmNU1lT1dPd3Y3YTVoTUgKZHg2Q0JheGF3bUt1VFZLL2Q3
13+
VU9wRmRQRnhLbjJzU0l1RzZwWUlyOHJFTHF0ZU1EUnRVa2ZYUUtBWFl4NlJRVAphYmgvSlZ3ODB2
14+
OFJkaEs1YVRQTld3dlZ6RFpHek9VcTBjQkV2dmdjbG5PQzFqYnE4bEFyMzJlZzQvWXkyRWJpCjV2
15+
MkoydVBlNlE9PQpQcml2YXRlLUxpbmVzOiAyOApBQUFDQUYvalRSU1NKK0RaNkRSRDMxcVAwZm9o
16+
QUtzbjNUaEFqL3Jyakg2blRyd2Z1dXUvZmI0OGd5MDdsTlBTCkVGNTlHTURBUXozVGl4and4N2Uv
17+
WVlZbHB0NExHSU56ajhYTXIzYktNeFlWSlNlbEF2bHVWR3BpMEVRRDZIc2kKTHRJSlp6TkhRYjBk
18+
U1lZenNySnBOREFJS2kvalBNOVVmWFBDbDVabmhvWHJJSWprSnFKTlltK0pZV0FmelNONQpDQkZC
19+
UENDUXRrcWs1V3hYYVB3WlVYcExQekZWL3dqMTBRUlJ2V0IzNE1WajAwckp0SVF6K2w5NGNDbEla
20+
bm5uCjh3MFF0TkJ6UXhqaVhLd0tWRTNDY040WkNsMWp3cTNCeWMwNkdZN21ueFEyU1hYUEwwRGNr
21+
S2E0Sm1MZUw1S24KY3J6UmJFSWVFZUQzdWhGelUzSTByRU5RUmg2NjlJcHJhamZSekxjRnhuQzcz
22+
QlMxUlR5Y2ZwZFNHRk9QWFQvMgpOZDM2MlhTZXA2Vk54U3Q1YTZ3a1dnSEpoMkg4ZFBjbmlESDFE
23+
bXJBZFA5N0FrZWkxbG1YcWJ6Q0lWOXBpZDNtCmZNQUpiSm00UmhRcFREdmV1RThOaUJnSTYyVGt3
24+
dWNvVzJ5M0xkU3YxMzdpSkJuSlNjMTFHOUE1YkcyeVFYRTIKYWlYUXhIeW9UMlF0VmY1WklYUmFW
25+
THViUW5jU2dMQmpnQ2QxQ2xqQjVqbFJZTXRTYzhiRmEvVEo1b1hPVk10QwpYNHhhcVo3Z3JHS05C
26+
cUJsRFRXblRnWk1tdndQVnVjbGU3MjgzNk9KUFhvMUxqM0sza21yeEMxdU5HMDc2My96CmJLOWl2
27+
QWF1SFRMMnQ0cHkra0k0NC9ZcERvR2sybnhsV01kRDNMM0pVeDNRejlMeEFBQUJBUURiVG94anFO
28+
UHIKRk9aYlg5M3g2TjU1SVdOQ1VLdXFMMVZLNjFESGFLWGZpaXdIRHlRYjEzUnhPREk2RlNXMElI
29+
eVpqMDh5ZjBTVApJRjlzWU1BcDcvRktRTkRJalVWcjFSNmdERWdBdytjeS9naXlqMFVscUhNc2dU
30+
UnNnSmEvSjJQYnViRDRWMzdZClJEOHpwdmtLZjhTSjBiUWpRMGlMdGFDVWJvQVA1ZmFhWGxJS3Zl
31+
Mnh6S3VYM09Jdk0zTyt1UTBJMDZqZGtMc2IKQUcxL2dBOXpiZmltcEx3SUJCZFVJenY3aEUyajhi
32+
aGpPR201U0lOa3M0WWVUTlRWV2R4ZnI3Yi8wVlFPSXJDdwpEUCsrQmhjOTdkK1g3WVVVZFFIM1Bw
33+
U1dyVm9KTnNITXB1VFpoaXdDZ0ZNTU9UWEhHVmxqRThyZ2RlU2xQc2dCCjFzUWh4clJTTUIrZkFB
34+
QUJBUUROdGU0KzFubFlLVjZFUVl4cnlKVUFLT3RNS0pmQTVYUlRzc1hoc0V5UjAwcS8KV2N3dHJm
35+
ZjM1dzdmQVhCVndlTnplZWl5cGV2SnNZZ1JwQXU5T01ZdHdYRUJWNUYreUlCUWtpRzE3YlNlei9z
36+
YgpueW9pV1U2QkFYR2JkQ2pmYTRlVUVURnpiY2xqdEtsZ0FCUkdqV0Q3UEZPNldmcEFqUXBjamFR
37+
cElUNlh6WGZ1CmZXZ3RsbkZrV3lQZFd6Skw0MldZQ3pjYVNySlNGS2Z6TkR2bVIzc25ZTmRwdWxN
38+
WlBLZUZ2bWUyVFpqdVRSUkUKN3U4S1pGeFBqUGQrQThHYW5Cck5QaWpQY0lxNUphQ1p6TDM1ZGhp
39+
WHBiQkMyUzJYeXJLcG1jK1hKUTgycWVPdwpkNmU5b0pWMTNQN0pTc1lhRWp2UVR5TnI2QTZuNDgy
40+
L3FtUmR1MVIzQUFBQkFRQ1c4emFSOU9lTzFwM1hpMTRYCjkwM245Y2NjUlVwZEw4RlJQNnkxaStU
41+
WmY3ZFJaZWt5bVg2Rm1Pam0wL25vVzNIcGVaMmJiRGlBUERadVc0ZlEKbWdaMGd6bG9kRENlSnZQ
42+
cXZTUXNRZUhKNGMyR3NUbjFUczMzWFNUVnhVS3d3amxGdkxqbzJCQXZpQWhmd2FDdwpSbFRoaWtH
43+
L0J0LzBtWE5tMXpwcVlucUFzWldvcmo5VVZBNjJPVzgxQ1VYMS9kVTFrY1JBaWNjbFFsak5TRFhi
44+
CnppYlU3am91enNDM0VVRURwbUdkbVRRWHhYc0I1MVVOaHl5VmgyZ0FWcUMwMDJtSndnRVVzanBx
45+
c2FMNk03M2EKejgzODhvRHBYYnAxQ0tMRHloOHZKcElOSDBqTk5kRDF3V29BUlFlSHMvTmJRRktR
46+
OElOSXZQc1p6MFpHZkc3Lwp1UytKClByaXZhdGUtTUFDOiBmMjY3ZTM0MzYwOTViZDc5OWYwNzQw
47+
NDExZmJhMDM0YzZjOWNiN2VhYzk1ZDg4NDk3ZGVlYmMxNGZjZWQ0ZDU2Cg==

test/tests/clone.js

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ var assert = require("assert");
33
var fse = require("fs-extra");
44
var local = path.join.bind(path, __dirname);
55
var _ = require("lodash");
6-
const util = require("util");
7-
const exec = util.promisify(require("child_process").exec);
86

97

108
const generatePathWithLength = (base, length) => {
@@ -237,62 +235,6 @@ describe("Clone", function() {
237235
});
238236
});
239237

240-
if (process.platform === "win32") {
241-
it("can clone with ssh using old agent with sha1 signing support only",
242-
async function () {
243-
var pageant = local("../../vendor/pageant.exe");
244-
var old_pageant = local("../../vendor/pageant_sha1.exe");
245-
var privateKey = local("../../vendor/private.ppk");
246-
var test = this;
247-
var url = "[email protected]:nodegit/test.git";
248-
var opts = {
249-
fetchOpts: {
250-
callbacks: {
251-
certificateCheck: () => 0,
252-
credentials: function(url, userName) {
253-
return NodeGit.Credential.sshKeyFromAgent(userName);
254-
}
255-
}
256-
}
257-
};
258-
259-
try {
260-
await exec("taskkill /im pageant.exe /f /t");
261-
} catch (e) {
262-
try {
263-
await exec("taskkill /im pageant_sha1.exe /f /t");
264-
} catch(e) {}
265-
}
266-
try {
267-
await exec(`powershell -command "Start-Process ${old_pageant} ${privateKey}`);
268-
} catch (e) {
269-
try {
270-
await exec(`powershell -command "Start-Process ${pageant} ${privateKey}`);
271-
} catch (e) {}
272-
return assert.fail("Cannot run old pageant");
273-
}
274-
275-
try {
276-
const repo = await Clone(url, clonePath, opts);
277-
test.repository = repo;
278-
} catch(e) {
279-
return assert.fail("Clone error: " + e.message);
280-
}
281-
282-
try {
283-
await exec("taskkill /im pageant_sha1.exe /f /t");
284-
} catch(e) {}
285-
286-
try {
287-
await exec(`powershell -command "Start-Process ${pageant} ${privateKey}`);
288-
} catch (e) {
289-
return assert.fail("Cannot run pageant");
290-
}
291-
292-
return assert.ok(test.repository instanceof Repository);
293-
});
294-
}
295-
296238
it("can clone with ssh", function() {
297239
var test = this;
298240
var url = "[email protected]:nodegit/test.git";

vendor/pageant.exe

-663 KB
Binary file not shown.

vendor/pageant/pageant_arm64.exe

880 KB
Binary file not shown.

vendor/pageant/pageant_x64.exe

914 KB
Binary file not shown.

vendor/pageant/pageant_x86.exe

831 KB
Binary file not shown.

0 commit comments

Comments
 (0)