iostreams 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +7 -7
- data/lib/io_streams/builder.rb +4 -3
- data/lib/io_streams/bzip2/reader.rb +1 -1
- data/lib/io_streams/bzip2/writer.rb +1 -1
- data/lib/io_streams/deprecated.rb +2 -3
- data/lib/io_streams/encode/reader.rb +5 -8
- data/lib/io_streams/encode/writer.rb +1 -1
- data/lib/io_streams/io_streams.rb +5 -2
- data/lib/io_streams/line/reader.rb +2 -1
- data/lib/io_streams/path.rb +4 -4
- data/lib/io_streams/paths/http.rb +8 -10
- data/lib/io_streams/paths/matcher.rb +10 -11
- data/lib/io_streams/paths/s3.rb +6 -6
- data/lib/io_streams/paths/sftp.rb +38 -23
- data/lib/io_streams/pgp.rb +45 -35
- data/lib/io_streams/pgp/reader.rb +4 -6
- data/lib/io_streams/pgp/writer.rb +1 -2
- data/lib/io_streams/reader.rb +2 -2
- data/lib/io_streams/record/writer.rb +2 -4
- data/lib/io_streams/row/writer.rb +3 -5
- data/lib/io_streams/stream.rb +6 -6
- data/lib/io_streams/symmetric_encryption/reader.rb +1 -3
- data/lib/io_streams/symmetric_encryption/writer.rb +2 -6
- data/lib/io_streams/tabular.rb +12 -10
- data/lib/io_streams/tabular/header.rb +4 -4
- data/lib/io_streams/tabular/parser/array.rb +2 -4
- data/lib/io_streams/tabular/parser/csv.rb +3 -5
- data/lib/io_streams/tabular/parser/fixed.rb +4 -3
- data/lib/io_streams/tabular/parser/hash.rb +2 -4
- data/lib/io_streams/tabular/parser/json.rb +2 -4
- data/lib/io_streams/tabular/parser/psv.rb +5 -7
- data/lib/io_streams/tabular/utility/csv_row.rb +9 -17
- data/lib/io_streams/utils.rb +3 -3
- data/lib/io_streams/utils/reliable_http.rb +98 -0
- data/lib/io_streams/version.rb +1 -1
- data/lib/io_streams/writer.rb +1 -1
- data/lib/io_streams/xlsx/reader.rb +5 -5
- data/lib/io_streams/zip/reader.rb +1 -1
- data/lib/io_streams/zip/writer.rb +2 -2
- data/lib/iostreams.rb +34 -34
- data/test/builder_test.rb +74 -74
- data/test/bzip2_reader_test.rb +8 -13
- data/test/bzip2_writer_test.rb +8 -9
- data/test/deprecated_test.rb +25 -29
- data/test/encode_reader_test.rb +14 -18
- data/test/encode_writer_test.rb +29 -30
- data/test/gzip_reader_test.rb +8 -13
- data/test/gzip_writer_test.rb +10 -11
- data/test/io_streams_test.rb +35 -35
- data/test/line_reader_test.rb +35 -39
- data/test/line_writer_test.rb +8 -9
- data/test/minimal_file_reader.rb +1 -1
- data/test/path_test.rb +24 -24
- data/test/paths/file_test.rb +42 -42
- data/test/paths/http_test.rb +5 -5
- data/test/paths/matcher_test.rb +11 -12
- data/test/paths/s3_test.rb +44 -46
- data/test/paths/sftp_test.rb +18 -18
- data/test/pgp_reader_test.rb +13 -15
- data/test/pgp_test.rb +43 -44
- data/test/pgp_writer_test.rb +27 -28
- data/test/record_reader_test.rb +9 -10
- data/test/record_writer_test.rb +10 -11
- data/test/row_reader_test.rb +5 -6
- data/test/row_writer_test.rb +7 -8
- data/test/stream_test.rb +60 -62
- data/test/tabular_test.rb +111 -111
- data/test/test_helper.rb +22 -22
- data/test/utils_test.rb +7 -7
- data/test/xlsx_reader_test.rb +12 -12
- data/test/zip_reader_test.rb +14 -21
- data/test/zip_writer_test.rb +10 -10
- metadata +4 -3
data/test/paths/sftp_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../test_helper"
|
2
2
|
|
3
3
|
module Paths
|
4
4
|
class SFTPTest < Minitest::Test
|
@@ -17,13 +17,13 @@ module Paths
|
|
17
17
|
|
18
18
|
let(:url) { File.join("sftp://", host_name, ftp_dir) }
|
19
19
|
|
20
|
-
let(:file_name) { File.join(File.dirname(__FILE__),
|
20
|
+
let(:file_name) { File.join(File.dirname(__FILE__), "..", "files", "text file.txt") }
|
21
21
|
let(:raw) { File.read(file_name) }
|
22
22
|
|
23
23
|
let(:root_path) { IOStreams::Paths::SFTP.new(url, username: username, password: password) }
|
24
24
|
|
25
25
|
let :existing_path do
|
26
|
-
path = root_path.join(
|
26
|
+
path = root_path.join("test.txt")
|
27
27
|
path.write(raw)
|
28
28
|
path
|
29
29
|
end
|
@@ -40,55 +40,55 @@ module Paths
|
|
40
40
|
root_path.join("writer_test.txt")
|
41
41
|
end
|
42
42
|
|
43
|
-
describe
|
44
|
-
it
|
45
|
-
assert_equal raw, existing_path.reader
|
43
|
+
describe "#reader" do
|
44
|
+
it "reads" do
|
45
|
+
assert_equal raw, existing_path.reader(&:read)
|
46
46
|
end
|
47
47
|
|
48
|
-
it
|
48
|
+
it "fails when the file does not exist" do
|
49
49
|
assert_raises IOStreams::Errors::CommunicationsFailure do
|
50
50
|
missing_file_path.read
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
it
|
54
|
+
it "fails when the directory does not exist" do
|
55
55
|
assert_raises IOStreams::Errors::CommunicationsFailure do
|
56
56
|
missing_path.read
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
describe
|
62
|
-
it
|
61
|
+
describe "#writer" do
|
62
|
+
it "writes" do
|
63
63
|
assert_equal raw.size, write_path.writer { |io| io.write(raw) }
|
64
64
|
assert_equal raw, write_path.read
|
65
65
|
end
|
66
66
|
|
67
|
-
it
|
67
|
+
it "fails when the directory does not exist" do
|
68
68
|
assert_raises IOStreams::Errors::CommunicationsFailure do
|
69
69
|
missing_path.write("Bad path")
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
describe
|
73
|
+
describe "use identity file instead of password" do
|
74
74
|
let :root_path do
|
75
|
-
IOStreams::Paths::SFTP.new(url, username: identity_username, ssh_options: {
|
75
|
+
IOStreams::Paths::SFTP.new(url, username: identity_username, ssh_options: {"IdentityFile" => ENV["SFTP_IDENTITY_FILE"]})
|
76
76
|
end
|
77
77
|
|
78
|
-
it
|
78
|
+
it "writes" do
|
79
79
|
skip "No identity file env var set: SFTP_IDENTITY_FILE" unless ENV["SFTP_IDENTITY_FILE"]
|
80
80
|
assert_equal raw.size, write_path.writer { |io| io.write(raw) }
|
81
81
|
assert_equal raw, write_path.read
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
describe
|
85
|
+
describe "use identity key instead of password" do
|
86
86
|
let :root_path do
|
87
|
-
key = File.open(ENV["SFTP_IDENTITY_FILE"],
|
88
|
-
IOStreams::Paths::SFTP.new(url, username: identity_username, ssh_options: {
|
87
|
+
key = File.open(ENV["SFTP_IDENTITY_FILE"], "rb", &:read)
|
88
|
+
IOStreams::Paths::SFTP.new(url, username: identity_username, ssh_options: {"IdentityKey" => key})
|
89
89
|
end
|
90
90
|
|
91
|
-
it
|
91
|
+
it "writes" do
|
92
92
|
skip "No identity file env var set: SFTP_IDENTITY_FILE" unless ENV["SFTP_IDENTITY_FILE"]
|
93
93
|
assert_equal raw.size, write_path.writer { |io| io.write(raw) }
|
94
94
|
assert_equal raw, write_path.read
|
data/test/pgp_reader_test.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "test_helper"
|
2
2
|
|
3
3
|
class PgpReaderTest < Minitest::Test
|
4
4
|
describe IOStreams::Pgp::Reader do
|
5
5
|
let :temp_file do
|
6
|
-
Tempfile.new(
|
6
|
+
Tempfile.new("iostreams")
|
7
7
|
end
|
8
8
|
|
9
9
|
let :decrypted do
|
10
|
-
file_name = File.join(File.dirname(__FILE__),
|
10
|
+
file_name = File.join(File.dirname(__FILE__), "files", "text.txt")
|
11
11
|
File.read(file_name)
|
12
12
|
end
|
13
13
|
|
@@ -15,34 +15,32 @@ class PgpReaderTest < Minitest::Test
|
|
15
15
|
temp_file.delete
|
16
16
|
end
|
17
17
|
|
18
|
-
describe
|
19
|
-
it
|
20
|
-
IOStreams::Pgp::Writer.file(temp_file.path, recipient:
|
18
|
+
describe ".file" do
|
19
|
+
it "reads encrypted file" do
|
20
|
+
IOStreams::Pgp::Writer.file(temp_file.path, recipient: "receiver@example.org") do |io|
|
21
21
|
io.write(decrypted)
|
22
22
|
end
|
23
23
|
|
24
|
-
result = IOStreams::Pgp::Reader.file(temp_file.path, passphrase:
|
24
|
+
result = IOStreams::Pgp::Reader.file(temp_file.path, passphrase: "receiver_passphrase", &:read)
|
25
25
|
assert_equal decrypted, result
|
26
26
|
end
|
27
27
|
|
28
|
-
it
|
28
|
+
it "fails with bad passphrase" do
|
29
29
|
assert_raises IOStreams::Pgp::Failure do
|
30
|
-
IOStreams::Pgp::Reader.file(temp_file.path, passphrase:
|
30
|
+
IOStreams::Pgp::Reader.file(temp_file.path, passphrase: "BAD", &:read)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
it
|
35
|
-
io_string = StringIO.new(
|
36
|
-
IOStreams::Pgp::Writer.stream(io_string, recipient:
|
34
|
+
it "streams input" do
|
35
|
+
io_string = StringIO.new("".b)
|
36
|
+
IOStreams::Pgp::Writer.stream(io_string, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
37
37
|
io.write(decrypted)
|
38
38
|
end
|
39
39
|
|
40
40
|
io = StringIO.new(io_string.string)
|
41
|
-
result = IOStreams::Pgp::Reader.stream(io, passphrase:
|
41
|
+
result = IOStreams::Pgp::Reader.stream(io, passphrase: "receiver_passphrase", &:read)
|
42
42
|
assert_equal decrypted, result
|
43
43
|
end
|
44
|
-
|
45
44
|
end
|
46
|
-
|
47
45
|
end
|
48
46
|
end
|
data/test/pgp_test.rb
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "test_helper"
|
2
2
|
|
3
|
-
#
|
3
|
+
# Turn on logging if experiencing issues with new versions of gpg
|
4
|
+
# require "logger"
|
5
|
+
# IOStreams::Pgp.logger = Logger.new(STDOUT)
|
4
6
|
|
5
7
|
class PgpTest < Minitest::Test
|
6
8
|
describe IOStreams::Pgp do
|
7
9
|
let :user_name do
|
8
|
-
|
10
|
+
"Joe Bloggs"
|
9
11
|
end
|
10
12
|
|
11
13
|
let :email do
|
12
|
-
|
14
|
+
"pgp_test@iostreams.net"
|
13
15
|
end
|
14
16
|
|
15
17
|
let :passphrase do
|
16
|
-
|
18
|
+
"hello"
|
17
19
|
end
|
18
20
|
|
19
21
|
let :generated_key_id do
|
@@ -30,23 +32,23 @@ class PgpTest < Minitest::Test
|
|
30
32
|
# Call list_keys again to give GnuPGP time.
|
31
33
|
IOStreams::Pgp.list_keys(email: email, private: true)
|
32
34
|
IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
|
33
|
-
#ap "KEYS DELETED"
|
34
|
-
#ap IOStreams::Pgp.list_keys(email: email, private: true)
|
35
|
+
# ap "KEYS DELETED"
|
36
|
+
# ap IOStreams::Pgp.list_keys(email: email, private: true)
|
35
37
|
end
|
36
38
|
|
37
|
-
describe
|
38
|
-
it
|
39
|
+
describe ".pgp_version" do
|
40
|
+
it "returns pgp version" do
|
39
41
|
assert IOStreams::Pgp.pgp_version
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
|
-
describe
|
44
|
-
it
|
45
|
+
describe ".generate_key" do
|
46
|
+
it "returns the key id" do
|
45
47
|
assert generated_key_id
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
49
|
-
describe
|
51
|
+
describe ".key?" do
|
50
52
|
before do
|
51
53
|
generated_key_id
|
52
54
|
# There is a timing issue with creating and then immediately using keys.
|
@@ -54,21 +56,21 @@ class PgpTest < Minitest::Test
|
|
54
56
|
IOStreams::Pgp.list_keys(email: email)
|
55
57
|
end
|
56
58
|
|
57
|
-
it
|
58
|
-
assert IOStreams::Pgp.
|
59
|
+
it "confirms public key" do
|
60
|
+
assert IOStreams::Pgp.key?(key_id: generated_key_id)
|
59
61
|
end
|
60
62
|
|
61
|
-
it
|
62
|
-
assert IOStreams::Pgp.
|
63
|
+
it "confirms private key" do
|
64
|
+
assert IOStreams::Pgp.key?(key_id: generated_key_id, private: true)
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
66
|
-
describe
|
67
|
-
it
|
68
|
-
refute IOStreams::Pgp.delete_keys(email:
|
68
|
+
describe ".delete_keys" do
|
69
|
+
it "handles no keys" do
|
70
|
+
refute IOStreams::Pgp.delete_keys(email: "random@iostreams.net", public: true, private: true)
|
69
71
|
end
|
70
72
|
|
71
|
-
it
|
73
|
+
it "deletes existing keys" do
|
72
74
|
generated_key_id
|
73
75
|
# There is a timing issue with creating and then deleting keys.
|
74
76
|
# Call list_keys again to give GnuPGP time.
|
@@ -76,34 +78,34 @@ class PgpTest < Minitest::Test
|
|
76
78
|
assert IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
|
77
79
|
end
|
78
80
|
|
79
|
-
it
|
81
|
+
it "deletes just the private key" do
|
80
82
|
generated_key_id
|
81
83
|
# There is a timing issue with creating and then deleting keys.
|
82
84
|
# Call list_keys again to give GnuPGP time.
|
83
85
|
IOStreams::Pgp.list_keys(email: email, private: true)
|
84
86
|
assert IOStreams::Pgp.delete_keys(email: email, public: false, private: true)
|
85
|
-
refute IOStreams::Pgp.
|
86
|
-
assert IOStreams::Pgp.
|
87
|
+
refute IOStreams::Pgp.key?(key_id: generated_key_id, private: true)
|
88
|
+
assert IOStreams::Pgp.key?(key_id: generated_key_id, private: false)
|
87
89
|
end
|
88
90
|
end
|
89
91
|
|
90
|
-
describe
|
92
|
+
describe ".export" do
|
91
93
|
before do
|
92
94
|
generated_key_id
|
93
95
|
end
|
94
96
|
|
95
|
-
it
|
97
|
+
it "exports public keys by email" do
|
96
98
|
assert ascii_keys = IOStreams::Pgp.export(email: email)
|
97
99
|
assert ascii_keys =~ /BEGIN PGP PUBLIC KEY BLOCK/, ascii_keys
|
98
100
|
end
|
99
101
|
|
100
|
-
it
|
102
|
+
it "exports public keys as binary" do
|
101
103
|
assert keys = IOStreams::Pgp.export(email: email, ascii: false)
|
102
104
|
refute keys =~ /BEGIN PGP (PUBLIC|PRIVATE) KEY BLOCK/, keys
|
103
105
|
end
|
104
106
|
end
|
105
107
|
|
106
|
-
describe
|
108
|
+
describe ".list_keys" do
|
107
109
|
before do
|
108
110
|
generated_key_id
|
109
111
|
# There is a timing issue with creating and then immediately using keys.
|
@@ -111,7 +113,7 @@ class PgpTest < Minitest::Test
|
|
111
113
|
IOStreams::Pgp.list_keys(email: email)
|
112
114
|
end
|
113
115
|
|
114
|
-
it
|
116
|
+
it "lists public keys" do
|
115
117
|
assert keys = IOStreams::Pgp.list_keys(email: email)
|
116
118
|
assert_equal 1, keys.size
|
117
119
|
assert key = keys.first
|
@@ -120,17 +122,15 @@ class PgpTest < Minitest::Test
|
|
120
122
|
assert_equal email, key[:email]
|
121
123
|
assert_includes key[:key_id], generated_key_id
|
122
124
|
assert_equal 1024, key[:key_length]
|
123
|
-
assert_includes [
|
125
|
+
assert_includes %w[R rsa], key[:key_type]
|
124
126
|
assert_equal user_name, key[:name]
|
125
127
|
refute key[:private], key
|
126
128
|
ver = IOStreams::Pgp.pgp_version
|
127
|
-
maint = ver.split(
|
128
|
-
if (ver.to_f >= 2) && (maint >= 30)
|
129
|
-
assert_equal 'ultimate', key[:trust]
|
130
|
-
end
|
129
|
+
maint = ver.split(".").last.to_i
|
130
|
+
assert_equal "ultimate", key[:trust] if (ver.to_f >= 2) && (maint >= 30)
|
131
131
|
end
|
132
132
|
|
133
|
-
it
|
133
|
+
it "lists private keys" do
|
134
134
|
assert keys = IOStreams::Pgp.list_keys(email: email, private: true)
|
135
135
|
assert_equal 1, keys.size
|
136
136
|
assert key = keys.first
|
@@ -139,14 +139,14 @@ class PgpTest < Minitest::Test
|
|
139
139
|
assert_equal email, key[:email]
|
140
140
|
assert_includes key[:key_id], generated_key_id
|
141
141
|
assert_equal 1024, key[:key_length]
|
142
|
-
assert_includes [
|
142
|
+
assert_includes %w[R rsa], key[:key_type]
|
143
143
|
assert_equal user_name, key[:name]
|
144
144
|
assert key[:private], key
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
|
-
describe
|
149
|
-
it
|
148
|
+
describe ".key_info" do
|
149
|
+
it "extracts public key info" do
|
150
150
|
assert keys = IOStreams::Pgp.key_info(key: public_key)
|
151
151
|
assert_equal 1, keys.size
|
152
152
|
assert key = keys.first
|
@@ -155,20 +155,20 @@ class PgpTest < Minitest::Test
|
|
155
155
|
assert_equal email, key[:email]
|
156
156
|
assert_includes key[:key_id], generated_key_id
|
157
157
|
assert_equal 1024, key[:key_length]
|
158
|
-
assert_includes [
|
158
|
+
assert_includes %w[R rsa], key[:key_type]
|
159
159
|
assert_equal user_name, key[:name]
|
160
160
|
refute key[:private], key
|
161
161
|
refute key.key?(:trust)
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
|
-
describe
|
166
|
-
it
|
165
|
+
describe ".import" do
|
166
|
+
it "handle duplicate public key" do
|
167
167
|
generated_key_id
|
168
168
|
assert_equal [], IOStreams::Pgp.import(key: public_key)
|
169
169
|
end
|
170
170
|
|
171
|
-
describe
|
171
|
+
describe "without keys" do
|
172
172
|
before do
|
173
173
|
@public_key = public_key
|
174
174
|
# There is a timing issue with creating and then deleting keys.
|
@@ -177,7 +177,7 @@ class PgpTest < Minitest::Test
|
|
177
177
|
IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
|
178
178
|
end
|
179
179
|
|
180
|
-
it
|
180
|
+
it "imports ascii public key" do
|
181
181
|
assert keys = IOStreams::Pgp.import(key: @public_key)
|
182
182
|
assert_equal 1, keys.size
|
183
183
|
assert key = keys.first
|
@@ -188,7 +188,7 @@ class PgpTest < Minitest::Test
|
|
188
188
|
refute key[:private], key
|
189
189
|
end
|
190
190
|
|
191
|
-
it
|
191
|
+
it "imports binary public key" do
|
192
192
|
assert keys = IOStreams::Pgp.import(key: @public_key)
|
193
193
|
assert_equal 1, keys.size
|
194
194
|
assert key = keys.first
|
@@ -200,6 +200,5 @@ class PgpTest < Minitest::Test
|
|
200
200
|
end
|
201
201
|
end
|
202
202
|
end
|
203
|
-
|
204
203
|
end
|
205
204
|
end
|
data/test/pgp_writer_test.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "test_helper"
|
2
2
|
|
3
3
|
class PgpWriterTest < Minitest::Test
|
4
4
|
describe IOStreams::Pgp::Writer do
|
5
5
|
let :temp_file do
|
6
|
-
Tempfile.new(
|
6
|
+
Tempfile.new("iostreams")
|
7
7
|
end
|
8
8
|
|
9
9
|
let :file_name do
|
@@ -11,7 +11,7 @@ class PgpWriterTest < Minitest::Test
|
|
11
11
|
end
|
12
12
|
|
13
13
|
let :decrypted do
|
14
|
-
file_name = File.join(File.dirname(__FILE__),
|
14
|
+
file_name = File.join(File.dirname(__FILE__), "files", "text.txt")
|
15
15
|
File.read(file_name)
|
16
16
|
end
|
17
17
|
|
@@ -19,51 +19,51 @@ class PgpWriterTest < Minitest::Test
|
|
19
19
|
temp_file.delete
|
20
20
|
end
|
21
21
|
|
22
|
-
describe
|
23
|
-
it
|
24
|
-
IOStreams::Pgp::Writer.file(file_name, recipient:
|
22
|
+
describe ".file" do
|
23
|
+
it "writes encrypted text file" do
|
24
|
+
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org") do |io|
|
25
25
|
io.write(decrypted)
|
26
26
|
end
|
27
27
|
|
28
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase:
|
28
|
+
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
|
29
29
|
assert_equal decrypted, result
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
33
|
-
binary_file_name = File.join(File.dirname(__FILE__),
|
34
|
-
binary_data = File.open(binary_file_name,
|
32
|
+
it "writes encrypted binary file" do
|
33
|
+
binary_file_name = File.join(File.dirname(__FILE__), "files", "spreadsheet.xlsx")
|
34
|
+
binary_data = File.open(binary_file_name, "rb", &:read)
|
35
35
|
|
36
|
-
File.open(binary_file_name,
|
37
|
-
IOStreams::Pgp::Writer.file(file_name, recipient:
|
36
|
+
File.open(binary_file_name, "rb") do |input|
|
37
|
+
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org") do |output|
|
38
38
|
IO.copy_stream(input, output)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase:
|
42
|
+
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
|
43
43
|
assert_equal binary_data, result
|
44
44
|
end
|
45
45
|
|
46
|
-
it
|
47
|
-
IOStreams::Pgp::Writer.file(file_name, recipient:
|
46
|
+
it "writes and signs encrypted file" do
|
47
|
+
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
48
48
|
io.write(decrypted)
|
49
49
|
end
|
50
50
|
|
51
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase:
|
51
|
+
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
|
52
52
|
assert_equal decrypted, result
|
53
53
|
end
|
54
54
|
|
55
|
-
it
|
56
|
-
skip
|
55
|
+
it "fails with bad signer passphrase" do
|
56
|
+
skip "GnuPG v2.1 and above passes when it should not" if IOStreams::Pgp.pgp_version.to_f >= 2.1
|
57
57
|
assert_raises IOStreams::Pgp::Failure do
|
58
|
-
IOStreams::Pgp::Writer.file(file_name, recipient:
|
58
|
+
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "BAD") do |io|
|
59
59
|
io.write(decrypted)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
it
|
64
|
+
it "fails with bad recipient" do
|
65
65
|
assert_raises IOStreams::Pgp::Failure do
|
66
|
-
IOStreams::Pgp::Writer.file(file_name, recipient:
|
66
|
+
IOStreams::Pgp::Writer.file(file_name, recipient: "BAD@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
67
67
|
io.write(decrypted)
|
68
68
|
# Allow process to terminate
|
69
69
|
sleep 1
|
@@ -72,25 +72,24 @@ class PgpWriterTest < Minitest::Test
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
it
|
75
|
+
it "fails with bad signer" do
|
76
76
|
assert_raises IOStreams::Pgp::Failure do
|
77
|
-
IOStreams::Pgp::Writer.file(file_name, recipient:
|
77
|
+
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org", signer: "BAD@example.org", signer_passphrase: "sender_passphrase") do |io|
|
78
78
|
io.write(decrypted)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
-
it
|
84
|
-
io_string = StringIO.new(
|
85
|
-
IOStreams::Pgp::Writer.stream(io_string, recipient:
|
83
|
+
it "writes to a stream" do
|
84
|
+
io_string = StringIO.new("".b)
|
85
|
+
IOStreams::Pgp::Writer.stream(io_string, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
86
86
|
io.write(decrypted)
|
87
87
|
end
|
88
88
|
|
89
89
|
io = StringIO.new(io_string.string)
|
90
|
-
result = IOStreams::Pgp::Reader.stream(io, passphrase:
|
90
|
+
result = IOStreams::Pgp::Reader.stream(io, passphrase: "receiver_passphrase", &:read)
|
91
91
|
assert_equal decrypted, result
|
92
92
|
end
|
93
|
-
|
94
93
|
end
|
95
94
|
end
|
96
95
|
end
|