Skip to content

Commit 7d36b95

Browse files
committed
create tests for commit signatures
1 parent ceb95f2 commit 7d36b95

28 files changed

+722
-0
lines changed

.github/workflows/linux-git-devel.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ jobs:
6666
run: |
6767
export TEST_GIT="$PWD"/git-master/git
6868
export TEST_GIT_EXEC_PATH=$(dirname "$TEST_GIT")
69+
export TEST_GPG=$(which gpg)
70+
export TEST_GPGSM=$(which gpgsm)
71+
export TEST_SSH_KEYGEN=$(which ssh-keygen)
6972
(cd git-branchless && cargo test --all-features --examples --tests --workspace --no-fail-fast)
7073
7174
- name: Run Rust tests on Git `next`

.github/workflows/linux.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ jobs:
8989
run: |
9090
export TEST_GIT="$PWD"/git
9191
export TEST_GIT_EXEC_PATH=$(dirname "$TEST_GIT")
92+
export TEST_GPG=$(which gpg)
93+
export TEST_GPGSM=$(which gpgsm)
94+
export TEST_SSH_KEYGEN=$(which ssh-keygen)
9295
cargo test --all-features --examples --tests --workspace --no-fail-fast
9396
9497
# Note that `--doc` can't be combined with other tests.

git-branchless-lib/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ name = "branchless"
1717
[features]
1818
default = []
1919
integration-test-bin = []
20+
test_gpg = []
21+
test_ssh = []
22+
test_x509 = []
2023

2124
[[bench]]
2225
harness = false

git-branchless-lib/src/core/config.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,16 @@ pub mod env_vars {
318318
/// See <https://git-scm.com/docs/git#Documentation/git.txt---exec-pathltpathgt>.
319319
pub const TEST_GIT_EXEC_PATH: &str = "TEST_GIT_EXEC_PATH";
320320

321+
/// Path to the `ssh-keygen` executable to use for signing functionality in
322+
/// tests.
323+
pub const TEST_SSH_KEYGEN: &str = "TEST_SSH_KEYGEN";
324+
325+
/// Path to the `gpg` executable to use for signing functionality in tests.
326+
pub const TEST_GPG: &str = "TEST_GPG";
327+
328+
/// Path to the `gpgsm` executable to use for signing functionality in tests.
329+
pub const TEST_GPGSM: &str = "TEST_GPGSM";
330+
321331
/// Specifies `git-branchless` subcommands to invoke directly.
322332
///
323333
/// For example, `TEST_SEPARATE_COMMAND_BINARIES=init test`, this function
@@ -381,6 +391,53 @@ or set `env.{0}` in your `config.toml` \
381391
Ok(git_exec_path)
382392
}
383393

394+
/// Get the path to the `ssh-keygen` executable for testing.
395+
#[instrument]
396+
pub fn get_path_to_ssh_keygen() -> eyre::Result<PathBuf> {
397+
let path_to_ssh_keygen = std::env::var_os(TEST_SSH_KEYGEN).ok_or_else(|| {
398+
eyre::eyre!(
399+
"No path to `ssh-keygen` executable was set. \
400+
Try running as: `{0}=$(which ssh-keygen) cargo test ...` \
401+
or set `env.{0}` in your `config.toml` \
402+
(see https://doc.rust-lang.org/cargo/reference/config.html)",
403+
TEST_SSH_KEYGEN,
404+
)
405+
})?;
406+
let path_to_ssh_keygen = PathBuf::from(&path_to_ssh_keygen);
407+
Ok(path_to_ssh_keygen)
408+
}
409+
410+
/// Get the path to the `gpg` executable for testing.
411+
#[instrument]
412+
pub fn get_path_to_gpg() -> eyre::Result<PathBuf> {
413+
let path_to_gpg = std::env::var_os(TEST_GPG).ok_or_else(|| {
414+
eyre::eyre!(
415+
"No path to `gpg` executable was set. \
416+
Try running as: `{0}=$(which gpg) cargo test ...` \
417+
or set `env.{0}` in your `config.toml` \
418+
(see https://doc.rust-lang.org/cargo/reference/config.html)",
419+
TEST_GPG,
420+
)
421+
})?;
422+
let path_to_gpg = PathBuf::from(&path_to_gpg);
423+
Ok(path_to_gpg)
424+
}
425+
/// Get the path to the `gpgsm` executable for testing.
426+
#[instrument]
427+
pub fn get_path_to_gpgsm() -> eyre::Result<PathBuf> {
428+
let path_to_gpgsm = std::env::var_os(TEST_GPGSM).ok_or_else(|| {
429+
eyre::eyre!(
430+
"No path to `gpgsm` executable was set. \
431+
Try running as: `{0}=$(which gpgsm) cargo test ...` \
432+
or set `env.{0}` in your `config.toml` \
433+
(see https://doc.rust-lang.org/cargo/reference/config.html)",
434+
TEST_GPGSM,
435+
)
436+
})?;
437+
let path_to_gpgsm = PathBuf::from(&path_to_gpgsm);
438+
Ok(path_to_gpgsm)
439+
}
440+
384441
/// Determine whether the specified binary should be run separately. See
385442
/// [`TEST_SEPARATE_COMMAND_BINARIES`] for more details.
386443
#[instrument]
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
This is a revocation certificate for the OpenPGP key:
2+
3+
pub rsa3072 2025-04-19 [S]
4+
F0BD7243618F2F5FB77B071DB3B9DB339CA11313
5+
uid Testy McTestface (Test GPG key) <test@example.com>
6+
7+
A revocation certificate is a kind of "kill switch" to publicly
8+
declare that a key shall not anymore be used. It is not possible
9+
to retract such a revocation certificate once it has been published.
10+
11+
Use it to revoke this key in case of a compromise or loss of
12+
the secret key. However, if the secret key is still accessible,
13+
it is better to generate a new revocation certificate and give
14+
a reason for the revocation. For details see the description of
15+
of the gpg command "--generate-revocation" in the GnuPG manual.
16+
17+
To avoid an accidental use of this file, a colon has been inserted
18+
before the 5 dashes below. Remove this colon with a text editor
19+
before importing and publishing this revocation certificate.
20+
21+
:-----BEGIN PGP PUBLIC KEY BLOCK-----
22+
Comment: This is a revocation certificate
23+
24+
iQG2BCABCgAgFiEE8L1yQ2GPL1+3ewcds7nbM5yhExMFAmgDBygCHQAACgkQs7nb
25+
M5yhExPKhwv/VQE1gperI+R3aXvjaTv9O3LhjldNnOjK3X0V+2tP8MDDvoYA0FXO
26+
Ncin/eP/O0BBfrr5/5mGfdlfOZQ7Lah9oA7RrVo2qoM+ybKaZwDqtipKAOetEAF1
27+
ldxplrgUwSu6960pUsxP2mCHIXGfYT+xnCuyiEbTUf7RtsfU/EShunzr6EuQ2gsO
28+
cSZnKusnIPUhTU8sYYzspg+bCdlGX1eVwrIz7ebh3g+4Gk15LbRrbJw8gOQZRwlm
29+
mPelxQUAoGD2sVGrwIEivWuJSVveW7vFMuAeAUZcL6tyZTwbnydUEoIZtPbkpc9+
30+
rC9YpJnfS4vKxGwTNjaLMSLhIPPnK/cP/aMq0TJNehBcjymrd7wc9flJLKj02xoS
31+
MxnuaSmqGxfSV14/Gn447krvt9RIJznYMVCgcMmNqKUqEqpSGlDK9/EuJYnm1AsF
32+
M57sb0I6uMgyfxcfzoO/mz2f5bbEs+BuBr+4x4T0ESKFoOI4OKJaHvbX6iCpvkwd
33+
LyX9m476O1WY
34+
=aqZr
35+
-----END PGP PUBLIC KEY BLOCK-----
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
Created: 20250419T021459
2+
Key: (private-key (rsa (n #00AAD367F33B2C6D9B01976C70F2A90A5D4ECA9BD06A
3+
A9AA36016A3C050A56CA25BD0D609279A5AA924AB786A651E19C346C4353FD916B80FC
4+
FF29F95DF56A74DC50935F80D1F40D669328E78DE02AD39CAA15421B92E11225191A3A
5+
4AF47BF2C7A1F478D465B5FBB96EA5D3B0B14B0C99A7B25A5DEDDA802FFB1E227B5E62
6+
F09FA6750A5774FDCABD2BA48A1C7835386BAA2641F52DDF704A743C6F8419F87004BE
7+
B8F93241976E63C5A042F8DED92D1B68E2AD9D01BA562354119F9F7C36B5DA841B0701
8+
7AD6DD09896B452D9BC64760EC0FD6935DA1EFD2DD7AABB11A937B61B8F82B02FB2929
9+
BB9B3FADE16E12792ADFD3F45E61F10A6E2758D4F6818E8525D6132E2B270AE99FEFAD
10+
E5D8A98579F59FC84951B2ED2748507281480D412CA73BC811D37B82636646775C3E48
11+
25E0490EF2AEED1683AC3F32D3BD1422F36AB458D0A21648F8BF92AA2AD8F2E0EB024A
12+
F8EBB84C20157621F0EBCED60332274C19069F4AF8F02694356915E80622C112E75F33
13+
DEA38290CF684D9B456B5D5D85#)(e #010001#)(d
14+
#5216EC65ACC2715B633CE69E32663C3651A6389143A88BC48F12838C32873976402E
15+
BD013696FF6C749E5404F9E52E80DCA3D02952A7F420DFE7C64F3A1FB1CFABA2DE6A93
16+
BA317460F46FADB4933004A1913CA6EE82DD0AD9D0CA4179D2547D4D9D2331823D1D1D
17+
E387A9BE47BC966E0271C94E48FE4ECA7FE4DFD2242DEC8EF3D95BA2627491682DA050
18+
C45499D2A69E69EB194CB58A8B24E763F979D772D13CEBBBC8C44F667B689D5681ACE9
19+
756D2E0E7C3AAE79626A70BC555639453B46E0E16EF86BF008708C70776FEB8CD1FDF0
20+
7DA32A30295E00D206532FB9C5CD2F35BC1AC86B6D343A305324FF4AB829364E1DEF18
21+
7675020EB6B44224C5118471CEB5AC989EED3FCCF2798B5CAC34AB1F2AAB8DA0693866
22+
464051A5740756C10A1656910FEE1B166CC907EB1561855F6780064AEAC600E4E88A6D
23+
58A79B510C15335A378BB994C442EF8785A16ABA883B47781345A75E4E27AC842D9075
24+
6D5AE4BDEADA18A3884878C109905A8CAC21E236F17A707CA132D33CD103B25F933823
25+
#)(p #00C291D6A0559549123A39E290CD9CA9EB897F7C8B45EC30AEC9D37C866DA57E
26+
F03B45215DF88312BAACD0CFA1DCF7472EA9BCEF23B9F5961F84100441AF58DD37DD96
27+
8CA131B94A3BCD54904EB4859A8F5BE4A7AD56B067DA02F1A8687B366FCBF56BD6D458
28+
4787F4E0873B4962E3B358D1D282833285AF017445D03737872828B0D2DC95965BAE8C
29+
524EEFC24A36EEAB62883BCBCEE46A26C993112B170DD024A0AF46867D9C72156125EC
30+
A756F1DE50FD8FEECA14DF60B46C7E00AD3883166B#)(q
31+
#00E0C275EEFCC37BAE56DECC8BD107AF89E3C3A680DFADBAFE68880788F5CE92C014
32+
5EA33C4555D7AB87FF3E258EB24BA1A399F37C2F595D5891A53D47D7AE91D86DAE954D
33+
889F995996CCDC28F2F3CE9B6449CA3EB779952D46D9D02A85C1DA629C240AB97F7D75
34+
89FDE7DE7C72C08624B5B9641F7503A4B76E87550D6E8441AE8FABC74CB4AC9A060A42
35+
54AADE896D072B5B0BFC8BDD567095405CC4D311094D17500B0455DCD3D1A4D5454999
36+
ECC67787832239920AB7046EFF00833977F7CF#)(u
37+
#608A137207BEAD80E6284FE4C18AD6DDAD8DC2B43D8B7B104037C31E09C644CF8974
38+
1ACA4931E3FA78DA331570024CB98FFE56264A88F1BBBA94B7AB7B3D0EE29FB5CDFD09
39+
7242DC808C74EB93044DCAE557C17B6AE607710AC6915BDB2AEE85377BE9300253AC05
40+
FCA6C471BC10AE8824F671B7CD9C171243811D489A87B62927A37FDB2B551F12A7C92B
41+
E1A6EC5DB44F5AB12E9722EFD7AF9CFB43F82800128722147ACCE75CA0D07EA7189E65
42+
096AF183D8171CF4FCB3A7701DE186003A77#)))
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
Created: 20250419T021459
2+
Key: (private-key (rsa (n #00BF93E1788CB4D8FEAC6FA907E1C29321C0C71101A3
3+
4F4191FAF85319472C61386B47179FC5AFFE021E8B4A7883D04C24229DC97D3C675CB2
4+
827D0F6F605E8727D3DAE59FFB6464BD5F3A87C7B23E453CD38EE93FA110905232F1F7
5+
A5899D93437BBE077EA7F2EDCBF4DF862CE5FE969F34B7ECD7639BEFBF701C837A7C1A
6+
DB314AC31B488B6392E44476E279483721FE8BEE173957E7732A88A604A62B65BC071C
7+
B3E295E4D69D60068C206EE516B0667894FB45F5742BDF5D557C1EC2DC020951E8B293
8+
6B112831613338D5D14DE80391F5572DDC9895CC74B0C869B70A9DEDA6A521105EDE87
9+
799CAC2529B9D96EDC15BAFB65D37DEE4051CD84CFCCE3F180BFA18FFC1ED3F7F87098
10+
1E973AD115DF98C4790CFA78FD98675CBAE25160390E9928A6CE93E8A39B618FA6F3DB
11+
0ED0388D14C1ED6AD9BFE79DE71BE4AFF3F828840DAF7307C45EC9B19E34F014C83E30
12+
2246AE1697AFD3B83DDD60A7A11137F6AEB2A06F32BF0A84B3C1978B771B6C4F712973
13+
0BC271989CCEEAB5DAB9E27B9F#)(e #010001#)(d
14+
#0E62DFE7D3C458166969BD2B255AB6FE2E1538038412FBC35A6526405BE617DE17BE
15+
A3261E25AB5DA42D252EB26C1E220956A2CB6FC4C749746C48F6A45C94DD4763AB557D
16+
9853CAB722FB107C23E6F5EFC781601DA53A2E086E8C66DD541621F0FB81FB5F7B506F
17+
BDDE5A6876BA99BBC9AD155768254D03103B971E615B0A225DAAAD81394E6B85A85751
18+
1FAA079EA7B1CDF380E97A602A341D28416B0610246C9529915E06789357A4202F607B
19+
7918E26D9C0685E0BC06AE2EFDCBB8C37F8451F9D65B9D8024CB5A531664826287E46B
20+
D2FE4027F6FFABE13BBD021D9D00ADC4ABBEA4C3718777DB28065F3073547C67B8A503
21+
4B09B6ED45FA62656071306D5410253CA5CDCAC6EF73DCD474C4C6D3A267509C05DD8D
22+
0AA64AB995D049CF3B761357FC9919F0B4F5BF177383E69D68BB1CD19C46BDD0848268
23+
2FD0404A44CEB8BED6501180E5527CFAB12AA1AE140F3C55D69C3E5DEC9944DD0FD9B1
24+
A744F60ADB0AAECB9B752BABE3A0B50270B2B58EA59A00EA890083DFFE80622B589A59
25+
#)(p #00D6D1E0B8F5B05C58275963029C341BFE6FBDFBD179AD08F2E12AEE362D03AE
26+
DEFE08C4D421572F4F015D14B63CF5AF9301E6871E57679BDB1E24E24E2D7EA3EE23B7
27+
1F0FA8390BDF21A7EB595A7DD3B4CD7D932A737365089AB3197E6B8560C01CBDF957EB
28+
B8906783709C12E9CC81BE661A68C00545F6AE0F6DE620D6F57599C45E5B551D318705
29+
44B609535862576187E76F859A9FD2BF036386F4DA5EBBCD62A1C81CB88C72FC7C800E
30+
8291DD284E23F14BB477EAE94BA884A2EE53766A05#)(q
31+
#00E44D691B94E729DC3F4A354F15662A54A6FC4AC5163CEA17C0B7046FD8EE8B0A02
32+
C8672745CE1A7EB7D21C6CC4187F1955D12639854097E1976CFB72C10590E5F7CBC97D
33+
49F6243AD10E35C8CE26062B5AB1435D2BC0C0086147501C4BFEE30F67596A3526D555
34+
BA61F91C7DD491D5FF1D163689FAFCFE76B665B3CAA56AE641594E4559473014A64FF1
35+
C93ADB626E1167895707FEEFD3D290CC3AE94E5F298A7C756DFEFBF550F29EC41EEAAA
36+
5FD72BB571B6BF69B85E9A3005F24355F46C53#)(u
37+
#008E66C1867B0618E613DA279DBC57228E8C3F570EFD0226C92EC1D2E1A9D910CB92
38+
304985287FDF65FB2BCDA34B0722A692346CBAD4D0BDCAF47C1B5162775094D13E04D5
39+
8A22C0CB7A5AA7E9B6E4521FACF6B269D2CB458492F8B189E6511061DBD73B93B3094F
40+
3EB01879AB7FD3DF7ED6E575DFDF86492FECC233BC7D53B8D4BFEFF5129FCAF71CFB6A
41+
B27B2F8BFBBEB3E684988CD756780BBA373866BE8F253F644FC36393E9E08A5BA5FD0E
42+
AA9518651DEDA352A534531C6BF71E694ECB42#)))
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)