summaryrefslogtreecommitdiff
blob: 457a5e74d532d1ea32f766f92826e082c78de751 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
Date: Fri, 26 May 2017 09:51:40 -0400
Subject: Use a short temporary homedir during the test suite

This avoids problems with the length of the path to the homedir as
compared to the size limits of sockaddr_un.sun_path, particularly on
systems where /run/user/$(id -u) is not present or available (such as
many minimalist build environments).
---
 t/000_setup.t        |  9 +++++----
 t/MyTestSpecific.pm  | 18 +++++++++++++++++-
 t/list_secret_keys.t |  3 ++-
 t/zzz_cleanup.t      |  6 ++++--
 4 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/t/000_setup.t b/t/000_setup.t
index 4dc4329..82d7005 100644
--- a/t/000_setup.t
+++ b/t/000_setup.t
@@ -12,13 +12,14 @@ use File::Copy;
 
 TEST
 {
-    make_path('test/gnupghome', { mode => 0700 });
-    my $agentconf = IO::File->new( "> test/gnupghome/gpg-agent.conf" );
+    my $homedir = $gnupg->options->homedir();
+    make_path($homedir, { mode => 0700 });
+    my $agentconf = IO::File->new( "> " . $homedir . "/gpg-agent.conf" );
     $agentconf->write("pinentry-program " . getcwd() . "/test/fake-pinentry.pl\n");
     $agentconf->close();
-    copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
+    copy('test/gpg.conf', $homedir . '/gpg.conf');
     # reset the state of any long-lived gpg-agent, ignoring errors:
-    system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
+    system('gpgconf', '--homedir', $homedir, '--quiet', '--kill', 'gpg-agent');
 
     reset_handles();
 
diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
index e513c25..809d55c 100644
--- a/t/MyTestSpecific.pm
+++ b/t/MyTestSpecific.pm
@@ -22,6 +22,7 @@ use IO::Seekable;
 use File::Compare;
 use Exporter;
 use Class::Struct;
+use File::Temp qw (tempdir);
 
 use GnuPG::Interface;
 use GnuPG::Handles;
@@ -40,10 +41,25 @@ use vars qw( @ISA           @EXPORT
 
 $gnupg = GnuPG::Interface->new( passphrase => 'test' );
 
+
+my $homedir;
+if (-f "test/gnupghome") {
+  my $record = IO::File->new( "< test/gnupghome" );
+  $homedir = <$record>;
+  $record->close();
+} else {
+  $homedir = tempdir( DIR => '/tmp');
+  my $record = IO::File->new( "> test/gnupghome" );
+  $record->write($homedir);
+  $record->close();
+}
+
 my @version = split('\.', $gnupg->version());
 $gpg_is_modern = ($version[0] > 2 || ($version[0] == 2 && $version[1] >= 1));
 
-$gnupg->options->hash_init( homedir              => 'test/gnupghome',
+
+
+$gnupg->options->hash_init( homedir              => $homedir,
                             armor                => 1,
                             meta_interactive     => 0,
                             meta_signing_key_id  => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
index 7040c38..d1e3f30 100644
--- a/t/list_secret_keys.t
+++ b/t/list_secret_keys.t
@@ -23,8 +23,9 @@ TEST
     $outfile = 'test/secret-keys/1.out';
     my $out = IO::File->new( "> $outfile" )
       or die "cannot open $outfile for writing: $ERRNO";
+    my $modern_pubring_line = $gnupg->options->homedir() . "/pubring.kbx\n";
     while (<$stdout>) {
-      if ($gpg_is_modern && /^\/.*\/test\/gnupghome\/pubring.kbx$/) {
+      if ($gpg_is_modern && ($_ eq $modern_pubring_line)) {
         $out->print("test/gnupghome/pubring.kbx\n");
       } elsif ($gpg_is_modern && /^--*$/) {
         $out->print("--------------------------\n");
diff --git a/t/zzz_cleanup.t b/t/zzz_cleanup.t
index eea3a48..c3ec16f 100644
--- a/t/zzz_cleanup.t
+++ b/t/zzz_cleanup.t
@@ -11,9 +11,11 @@ use File::Path qw (remove_tree);
 # this is actually no test, just cleanup.
 TEST
 {
+    my $homedir = $gnupg->options->homedir();
     my $err = [];
     # kill off any long-lived gpg-agent, ignoring errors:
-    system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
-    remove_tree('test/gnupghome', {error => \$err});
+    system('gpgconf', '--homedir', $homedir, '--quiet', '--kill', 'gpg-agent');
+    remove_tree($homedir, {error => \$err});
+    unlink('test/gnupghome');
     return ! @$err;
 };