iostreams 1.10.3 → 2.0.0
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 +20 -2
- data/Rakefile +7 -0
- data/lib/io_streams/builder.rb +10 -10
- data/lib/io_streams/bzip2/writer.rb +1 -1
- data/lib/io_streams/encode/reader.rb +2 -2
- data/lib/io_streams/encode/writer.rb +5 -5
- data/lib/io_streams/gzip/reader.rb +1 -1
- data/lib/io_streams/gzip/writer.rb +1 -1
- data/lib/io_streams/io_streams.rb +47 -21
- data/lib/io_streams/line/reader.rb +2 -2
- data/lib/io_streams/line/writer.rb +1 -1
- data/lib/io_streams/path.rb +2 -2
- data/lib/io_streams/paths/file.rb +25 -11
- data/lib/io_streams/paths/http.rb +80 -7
- data/lib/io_streams/paths/matcher.rb +3 -3
- data/lib/io_streams/paths/s3.rb +22 -3
- data/lib/io_streams/paths/sftp.rb +9 -10
- data/lib/io_streams/pgp/reader.rb +25 -7
- data/lib/io_streams/pgp/writer.rb +95 -29
- data/lib/io_streams/pgp.rb +289 -87
- data/lib/io_streams/reader.rb +4 -4
- data/lib/io_streams/record/reader.rb +3 -4
- data/lib/io_streams/record/writer.rb +3 -4
- data/lib/io_streams/row/reader.rb +1 -1
- data/lib/io_streams/row/writer.rb +1 -1
- data/lib/io_streams/stream.rb +36 -30
- data/lib/io_streams/symmetric_encryption/reader.rb +2 -2
- data/lib/io_streams/symmetric_encryption/writer.rb +4 -4
- data/lib/io_streams/tabular/header.rb +18 -6
- data/lib/io_streams/tabular/parser/array.rb +0 -10
- data/lib/io_streams/tabular/parser/csv.rb +6 -38
- data/lib/io_streams/tabular/parser/fixed.rb +5 -5
- data/lib/io_streams/tabular/parser/psv.rb +0 -12
- data/lib/io_streams/tabular.rb +5 -10
- data/lib/io_streams/utils.rb +6 -8
- data/lib/io_streams/version.rb +1 -1
- data/lib/io_streams/writer.rb +6 -6
- data/lib/io_streams/xlsx/reader.rb +1 -1
- data/lib/io_streams/zip/writer.rb +22 -10
- data/lib/iostreams.rb +0 -1
- metadata +28 -113
- data/lib/io_streams/deprecated.rb +0 -216
- data/lib/io_streams/tabular/utility/csv_row.rb +0 -105
- data/test/builder_test.rb +0 -311
- data/test/bzip2_reader_test.rb +0 -27
- data/test/bzip2_writer_test.rb +0 -56
- data/test/deprecated_test.rb +0 -121
- data/test/encode_reader_test.rb +0 -51
- data/test/encode_writer_test.rb +0 -90
- data/test/files/embedded_lines_test.csv +0 -7
- data/test/files/multiple_files.zip +0 -0
- data/test/files/spreadsheet.xlsx +0 -0
- data/test/files/test.csv +0 -4
- data/test/files/test.json +0 -3
- data/test/files/test.psv +0 -4
- data/test/files/text file.txt +0 -3
- data/test/files/text.txt +0 -3
- data/test/files/text.txt.bz2 +0 -0
- data/test/files/text.txt.gz +0 -0
- data/test/files/text.txt.gz.zip +0 -0
- data/test/files/text.zip +0 -0
- data/test/files/text.zip.gz +0 -0
- data/test/files/unclosed_quote_large_test.csv +0 -1658
- data/test/files/unclosed_quote_test.csv +0 -4
- data/test/files/unclosed_quote_test2.csv +0 -3
- data/test/files/utf16_test.csv +0 -0
- data/test/gzip_reader_test.rb +0 -27
- data/test/gzip_writer_test.rb +0 -52
- data/test/io_streams_test.rb +0 -132
- data/test/line_reader_test.rb +0 -325
- data/test/line_writer_test.rb +0 -59
- data/test/minimal_file_reader.rb +0 -25
- data/test/path_test.rb +0 -55
- data/test/paths/file_test.rb +0 -202
- data/test/paths/http_test.rb +0 -34
- data/test/paths/matcher_test.rb +0 -120
- data/test/paths/s3_test.rb +0 -220
- data/test/paths/sftp_test.rb +0 -106
- data/test/pgp_reader_test.rb +0 -46
- data/test/pgp_test.rb +0 -254
- data/test/pgp_writer_test.rb +0 -130
- data/test/record_reader_test.rb +0 -60
- data/test/record_writer_test.rb +0 -82
- data/test/row_reader_test.rb +0 -35
- data/test/row_writer_test.rb +0 -56
- data/test/stream_test.rb +0 -574
- data/test/tabular_test.rb +0 -338
- data/test/test_helper.rb +0 -40
- data/test/utils_test.rb +0 -20
- data/test/xlsx_reader_test.rb +0 -37
- data/test/zip_reader_test.rb +0 -53
- data/test/zip_writer_test.rb +0 -48
data/test/pgp_reader_test.rb
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
|
|
3
|
-
class PgpReaderTest < Minitest::Test
|
|
4
|
-
describe IOStreams::Pgp::Reader do
|
|
5
|
-
let :temp_file do
|
|
6
|
-
Tempfile.new("iostreams")
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
let :decrypted do
|
|
10
|
-
file_name = File.join(File.dirname(__FILE__), "files", "text.txt")
|
|
11
|
-
File.read(file_name)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
after do
|
|
15
|
-
temp_file.delete
|
|
16
|
-
end
|
|
17
|
-
|
|
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
|
-
io.write(decrypted)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
result = IOStreams::Pgp::Reader.file(temp_file.path, passphrase: "receiver_passphrase", &:read)
|
|
25
|
-
assert_equal decrypted, result
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "fails with bad passphrase" do
|
|
29
|
-
assert_raises IOStreams::Pgp::Failure do
|
|
30
|
-
IOStreams::Pgp::Reader.file(temp_file.path, passphrase: "BAD", &:read)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
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
|
-
io.write(decrypted)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
io = StringIO.new(io_string.string)
|
|
41
|
-
result = IOStreams::Pgp::Reader.stream(io, passphrase: "receiver_passphrase", &:read)
|
|
42
|
-
assert_equal decrypted, result
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
data/test/pgp_test.rb
DELETED
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
|
|
3
|
-
# Turn on logging if experiencing issues with new versions of gpg
|
|
4
|
-
# require "logger"
|
|
5
|
-
# IOStreams::Pgp.logger = Logger.new(STDOUT)
|
|
6
|
-
|
|
7
|
-
class PgpTest < Minitest::Test
|
|
8
|
-
describe IOStreams::Pgp do
|
|
9
|
-
let :user_name do
|
|
10
|
-
"Joe Bloggs"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
let :email do
|
|
14
|
-
"pgp_test@iostreams.net"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
let :passphrase do
|
|
18
|
-
"hello"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
let :generated_key_id do
|
|
22
|
-
IOStreams::Pgp.generate_key(name: user_name, email: email, key_length: 1024, passphrase: passphrase)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
let :public_key do
|
|
26
|
-
generated_key_id
|
|
27
|
-
IOStreams::Pgp.export(email: email)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
before do
|
|
31
|
-
# There is a timing issue with creating and then deleting keys.
|
|
32
|
-
# Call list_keys again to give GnuPGP time.
|
|
33
|
-
IOStreams::Pgp.list_keys(email: email, private: true)
|
|
34
|
-
IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
|
|
35
|
-
# ap "KEYS DELETED"
|
|
36
|
-
# ap IOStreams::Pgp.list_keys(email: email, private: true)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
describe ".pgp_version" do
|
|
40
|
-
it "returns pgp version" do
|
|
41
|
-
assert IOStreams::Pgp.pgp_version
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
describe ".generate_key" do
|
|
46
|
-
it "returns the key id" do
|
|
47
|
-
assert generated_key_id
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe ".key?" do
|
|
52
|
-
before do
|
|
53
|
-
generated_key_id
|
|
54
|
-
# There is a timing issue with creating and then immediately using keys.
|
|
55
|
-
# Call list_keys again to give GnuPGP time.
|
|
56
|
-
IOStreams::Pgp.list_keys(email: email)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "confirms public key" do
|
|
60
|
-
assert IOStreams::Pgp.key?(key_id: generated_key_id)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "confirms private key" do
|
|
64
|
-
assert IOStreams::Pgp.key?(key_id: generated_key_id, private: true)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
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)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "deletes existing keys with specified email" do
|
|
74
|
-
generated_key_id
|
|
75
|
-
# There is a timing issue with creating and then deleting keys.
|
|
76
|
-
# Call list_keys again to give GnuPGP time.
|
|
77
|
-
IOStreams::Pgp.list_keys(email: email, private: true)
|
|
78
|
-
assert IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "deletes existing keys with specified key_id" do
|
|
82
|
-
generated_key_id
|
|
83
|
-
|
|
84
|
-
# There is a timing issue with creating and then deleting keys.
|
|
85
|
-
# Call list_keys again to give GnuPGP time.
|
|
86
|
-
IOStreams::Pgp.list_keys(key_id: generated_key_id, private: true)
|
|
87
|
-
assert IOStreams::Pgp.delete_keys(key_id: generated_key_id, public: true, private: true)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "deletes just the private key with specified email" do
|
|
91
|
-
generated_key_id
|
|
92
|
-
# There is a timing issue with creating and then deleting keys.
|
|
93
|
-
# Call list_keys again to give GnuPGP time.
|
|
94
|
-
IOStreams::Pgp.list_keys(email: email, private: true)
|
|
95
|
-
assert IOStreams::Pgp.delete_keys(email: email, public: false, private: true)
|
|
96
|
-
refute IOStreams::Pgp.key?(key_id: generated_key_id, private: true)
|
|
97
|
-
assert IOStreams::Pgp.key?(key_id: generated_key_id, private: false)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "deletes just the private key with specified key_id" do
|
|
101
|
-
generated_key_id
|
|
102
|
-
# There is a timing issue with creating and then deleting keys.
|
|
103
|
-
# Call list_keys again to give GnuPGP time.
|
|
104
|
-
IOStreams::Pgp.list_keys(key_id: generated_key_id, private: true)
|
|
105
|
-
assert IOStreams::Pgp.delete_keys(key_id: generated_key_id, public: false, private: true)
|
|
106
|
-
refute IOStreams::Pgp.key?(key_id: generated_key_id, private: true)
|
|
107
|
-
assert IOStreams::Pgp.key?(key_id: generated_key_id, private: false)
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
describe ".export" do
|
|
112
|
-
before do
|
|
113
|
-
generated_key_id
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "exports public keys by email" do
|
|
117
|
-
assert ascii_keys = IOStreams::Pgp.export(email: email)
|
|
118
|
-
assert ascii_keys =~ /BEGIN PGP PUBLIC KEY BLOCK/, ascii_keys
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "exports public keys as binary" do
|
|
122
|
-
assert keys = IOStreams::Pgp.export(email: email, ascii: false)
|
|
123
|
-
refute keys =~ /BEGIN PGP (PUBLIC|PRIVATE) KEY BLOCK/, keys
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
describe ".list_keys" do
|
|
128
|
-
before do
|
|
129
|
-
generated_key_id
|
|
130
|
-
# There is a timing issue with creating and then immediately using keys.
|
|
131
|
-
# Call list_keys again to give GnuPGP time.
|
|
132
|
-
IOStreams::Pgp.list_keys(email: email)
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
it "lists public keys for email" do
|
|
136
|
-
assert keys = IOStreams::Pgp.list_keys(email: email)
|
|
137
|
-
assert_equal 1, keys.size
|
|
138
|
-
assert key = keys.first
|
|
139
|
-
|
|
140
|
-
assert_equal Date.today, key[:date]
|
|
141
|
-
assert_equal email, key[:email]
|
|
142
|
-
assert_includes key[:key_id], generated_key_id
|
|
143
|
-
assert_equal 1024, key[:key_length]
|
|
144
|
-
assert_includes %w[R rsa], key[:key_type]
|
|
145
|
-
assert_equal user_name, key[:name]
|
|
146
|
-
refute key[:private], key
|
|
147
|
-
ver = IOStreams::Pgp.pgp_version
|
|
148
|
-
maint = ver.split(".").last.to_i
|
|
149
|
-
assert_equal "ultimate", key[:trust] if (ver.to_f >= 2) && (maint >= 30)
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
it "lists public keys for key_id" do
|
|
153
|
-
assert keys = IOStreams::Pgp.list_keys(key_id: generated_key_id)
|
|
154
|
-
assert_equal 1, keys.size
|
|
155
|
-
assert key = keys.first
|
|
156
|
-
|
|
157
|
-
assert_equal Date.today, key[:date]
|
|
158
|
-
assert_equal email, key[:email]
|
|
159
|
-
assert_includes key[:key_id], generated_key_id
|
|
160
|
-
assert_equal 1024, key[:key_length]
|
|
161
|
-
assert_includes %w[R rsa], key[:key_type]
|
|
162
|
-
assert_equal user_name, key[:name]
|
|
163
|
-
refute key[:private], key
|
|
164
|
-
ver = IOStreams::Pgp.pgp_version
|
|
165
|
-
maint = ver.split(".").last.to_i
|
|
166
|
-
assert_equal "ultimate", key[:trust] if (ver.to_f >= 2) && (maint >= 30)
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it "lists private keys for email" do
|
|
170
|
-
assert keys = IOStreams::Pgp.list_keys(email: email, private: true)
|
|
171
|
-
assert_equal 1, keys.size
|
|
172
|
-
assert key = keys.first
|
|
173
|
-
|
|
174
|
-
assert_equal Date.today, key[:date]
|
|
175
|
-
assert_equal email, key[:email]
|
|
176
|
-
assert_includes key[:key_id], generated_key_id
|
|
177
|
-
assert_equal 1024, key[:key_length]
|
|
178
|
-
assert_includes %w[R rsa], key[:key_type]
|
|
179
|
-
assert_equal user_name, key[:name]
|
|
180
|
-
assert key[:private], key
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
it "lists private keys for key_id" do
|
|
184
|
-
assert keys = IOStreams::Pgp.list_keys(key_id: generated_key_id, private: true)
|
|
185
|
-
assert_equal 1, keys.size
|
|
186
|
-
assert key = keys.first
|
|
187
|
-
|
|
188
|
-
assert_equal Date.today, key[:date]
|
|
189
|
-
assert_equal email, key[:email]
|
|
190
|
-
assert_includes key[:key_id], generated_key_id
|
|
191
|
-
assert_equal 1024, key[:key_length]
|
|
192
|
-
assert_includes %w[R rsa], key[:key_type]
|
|
193
|
-
assert_equal user_name, key[:name]
|
|
194
|
-
assert key[:private], key
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
describe ".key_info" do
|
|
199
|
-
it "extracts public key info" do
|
|
200
|
-
assert keys = IOStreams::Pgp.key_info(key: public_key)
|
|
201
|
-
assert_equal 1, keys.size
|
|
202
|
-
assert key = keys.first
|
|
203
|
-
|
|
204
|
-
assert_equal Date.today, key[:date]
|
|
205
|
-
assert_equal email, key[:email]
|
|
206
|
-
assert_includes key[:key_id], generated_key_id
|
|
207
|
-
assert_equal 1024, key[:key_length]
|
|
208
|
-
assert_includes %w[R rsa], key[:key_type]
|
|
209
|
-
assert_equal user_name, key[:name]
|
|
210
|
-
refute key[:private], key
|
|
211
|
-
refute key.key?(:trust)
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
describe ".import" do
|
|
216
|
-
it "handle duplicate public key" do
|
|
217
|
-
generated_key_id
|
|
218
|
-
assert_equal [], IOStreams::Pgp.import(key: public_key)
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
describe "without keys" do
|
|
222
|
-
before do
|
|
223
|
-
@public_key = public_key
|
|
224
|
-
# There is a timing issue with creating and then deleting keys.
|
|
225
|
-
# Call list_keys again to give GnuPGP time.
|
|
226
|
-
IOStreams::Pgp.list_keys(email: email, private: true)
|
|
227
|
-
IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
it "imports ascii public key" do
|
|
231
|
-
assert keys = IOStreams::Pgp.import(key: @public_key)
|
|
232
|
-
assert_equal 1, keys.size
|
|
233
|
-
assert key = keys.first
|
|
234
|
-
|
|
235
|
-
assert_equal email, key[:email]
|
|
236
|
-
assert_equal generated_key_id, key[:key_id]
|
|
237
|
-
assert_equal user_name, key[:name]
|
|
238
|
-
refute key[:private], key
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
it "imports binary public key" do
|
|
242
|
-
assert keys = IOStreams::Pgp.import(key: @public_key)
|
|
243
|
-
assert_equal 1, keys.size
|
|
244
|
-
assert key = keys.first
|
|
245
|
-
|
|
246
|
-
assert_equal email, key[:email]
|
|
247
|
-
assert_equal generated_key_id, key[:key_id]
|
|
248
|
-
assert_equal user_name, key[:name]
|
|
249
|
-
refute key[:private], key
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
end
|
|
254
|
-
end
|
data/test/pgp_writer_test.rb
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
|
|
3
|
-
class PgpWriterTest < Minitest::Test
|
|
4
|
-
describe IOStreams::Pgp::Writer do
|
|
5
|
-
let :temp_file do
|
|
6
|
-
Tempfile.new("iostreams")
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
let :file_name do
|
|
10
|
-
temp_file.path
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
let :decrypted do
|
|
14
|
-
file_name = File.join(File.dirname(__FILE__), "files", "text.txt")
|
|
15
|
-
File.read(file_name)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
after do
|
|
19
|
-
temp_file.delete
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe ".file" do
|
|
23
|
-
it "writes encrypted text file" do
|
|
24
|
-
result =
|
|
25
|
-
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org") do |io|
|
|
26
|
-
io.write(decrypted)
|
|
27
|
-
53534
|
|
28
|
-
end
|
|
29
|
-
assert_equal 53534, result
|
|
30
|
-
|
|
31
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
|
|
32
|
-
assert_equal decrypted, result
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "writes encrypted binary file" do
|
|
36
|
-
binary_file_name = File.join(File.dirname(__FILE__), "files", "spreadsheet.xlsx")
|
|
37
|
-
binary_data = File.open(binary_file_name, "rb", &:read)
|
|
38
|
-
|
|
39
|
-
File.open(binary_file_name, "rb") do |input|
|
|
40
|
-
result =
|
|
41
|
-
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org") do |output|
|
|
42
|
-
IO.copy_stream(input, output)
|
|
43
|
-
53534
|
|
44
|
-
end
|
|
45
|
-
assert_equal 53534, result
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
|
|
49
|
-
assert_equal binary_data, result
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "writes and signs encrypted file" do
|
|
53
|
-
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
|
54
|
-
io.write(decrypted)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
|
|
58
|
-
assert_equal decrypted, result
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "supports multiple recipients" do
|
|
62
|
-
IOStreams::Pgp::Writer.file(file_name, recipient: %w[receiver@example.org receiver2@example.org], signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
|
63
|
-
io.write(decrypted)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
|
|
67
|
-
assert_equal decrypted, result
|
|
68
|
-
|
|
69
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver2_passphrase", &:read)
|
|
70
|
-
assert_equal decrypted, result
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "encrypts for recipient and audit recipient" do
|
|
74
|
-
IOStreams::Pgp::Writer.stub(:audit_recipient, "receiver2@example.org") do
|
|
75
|
-
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
|
76
|
-
io.write(decrypted)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
|
|
81
|
-
assert_equal decrypted, result
|
|
82
|
-
|
|
83
|
-
result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver2_passphrase", &:read)
|
|
84
|
-
assert_equal decrypted, result
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "fails with bad signer passphrase" do
|
|
88
|
-
skip "GnuPG v2.1 and above passes when it should not" if IOStreams::Pgp.pgp_version.to_f >= 2.1
|
|
89
|
-
assert_raises IOStreams::Pgp::Failure do
|
|
90
|
-
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "BAD") do |io|
|
|
91
|
-
io.write(decrypted)
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "fails with bad recipient" do
|
|
97
|
-
assert_raises IOStreams::Pgp::Failure do
|
|
98
|
-
IOStreams::Pgp::Writer.file(file_name, recipient: "BAD@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
|
99
|
-
io.write(decrypted)
|
|
100
|
-
# Allow process to terminate
|
|
101
|
-
sleep 1
|
|
102
|
-
io.write(decrypted)
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "fails with bad signer" do
|
|
108
|
-
assert_raises IOStreams::Pgp::Failure do
|
|
109
|
-
IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org", signer: "BAD@example.org", signer_passphrase: "sender_passphrase") do |io|
|
|
110
|
-
io.write(decrypted)
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "writes to a stream" do
|
|
116
|
-
io_string = StringIO.new("".b)
|
|
117
|
-
result =
|
|
118
|
-
IOStreams::Pgp::Writer.stream(io_string, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
|
|
119
|
-
io.write(decrypted)
|
|
120
|
-
53534
|
|
121
|
-
end
|
|
122
|
-
assert_equal 53534, result
|
|
123
|
-
|
|
124
|
-
io = StringIO.new(io_string.string)
|
|
125
|
-
result = IOStreams::Pgp::Reader.stream(io, passphrase: "receiver_passphrase", &:read)
|
|
126
|
-
assert_equal decrypted, result
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
data/test/record_reader_test.rb
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
|
|
3
|
-
class RecordReaderTest < Minitest::Test
|
|
4
|
-
describe IOStreams::Record::Reader do
|
|
5
|
-
let :file_name do
|
|
6
|
-
File.join(File.dirname(__FILE__), "files", "test.csv")
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
let :json_file_name do
|
|
10
|
-
File.join(File.dirname(__FILE__), "files", "test.json")
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
let :csv_rows do
|
|
14
|
-
CSV.read(file_name)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
let :expected do
|
|
18
|
-
rows = csv_rows.dup
|
|
19
|
-
header = rows.shift
|
|
20
|
-
rows.collect { |row| header.zip(row).to_h }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe "#each" do
|
|
24
|
-
it "csv file" do
|
|
25
|
-
records = []
|
|
26
|
-
IOStreams::Record::Reader.file(file_name, cleanse_header: false) do |io|
|
|
27
|
-
io.each { |row| records << row }
|
|
28
|
-
end
|
|
29
|
-
assert_equal expected, records
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "json file" do
|
|
33
|
-
records = []
|
|
34
|
-
IOStreams::Record::Reader.file(json_file_name, cleanse_header: false, format: :json) do |input|
|
|
35
|
-
input.each { |row| records << row }
|
|
36
|
-
end
|
|
37
|
-
assert_equal expected, records
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "stream" do
|
|
41
|
-
rows = []
|
|
42
|
-
IOStreams::Line::Reader.file(file_name) do |file|
|
|
43
|
-
IOStreams::Record::Reader.stream(file, cleanse_header: false) do |io|
|
|
44
|
-
io.each { |row| rows << row }
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
assert_equal expected, rows
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe "#collect" do
|
|
52
|
-
it "json file" do
|
|
53
|
-
records = IOStreams::Record::Reader.file(json_file_name, format: :json) do |input|
|
|
54
|
-
input.collect { |record| record["state"] }
|
|
55
|
-
end
|
|
56
|
-
assert_equal expected.collect { |record| record["state"] }, records
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
data/test/record_writer_test.rb
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
require "csv"
|
|
3
|
-
|
|
4
|
-
class RecordWriterTest < Minitest::Test
|
|
5
|
-
describe IOStreams::Record::Writer do
|
|
6
|
-
let :csv_file_name do
|
|
7
|
-
File.join(File.dirname(__FILE__), "files", "test.csv")
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
let :json_file_name do
|
|
11
|
-
File.join(File.dirname(__FILE__), "files", "test.json")
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
let :raw_csv_data do
|
|
15
|
-
File.read(csv_file_name)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
let :raw_json_data do
|
|
19
|
-
File.read(json_file_name)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
let :csv_rows do
|
|
23
|
-
CSV.read(csv_file_name)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
let :inputs do
|
|
27
|
-
rows = csv_rows.dup
|
|
28
|
-
header = rows.shift
|
|
29
|
-
rows.collect { |row| header.zip(row).to_h }
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
let :temp_file do
|
|
33
|
-
Tempfile.new("iostreams")
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
let :file_name do
|
|
37
|
-
temp_file.path
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
after do
|
|
41
|
-
temp_file.delete
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
describe "#<<" do
|
|
45
|
-
it "file" do
|
|
46
|
-
result =
|
|
47
|
-
IOStreams::Record::Writer.file(file_name) do |io|
|
|
48
|
-
inputs.each { |hash| io << hash }
|
|
49
|
-
53534
|
|
50
|
-
end
|
|
51
|
-
assert_equal 53534, result
|
|
52
|
-
result = File.read(file_name)
|
|
53
|
-
assert_equal raw_csv_data, result
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "json file" do
|
|
57
|
-
result =
|
|
58
|
-
IOStreams::Record::Writer.file(file_name, file_name: "abc.json") do |io|
|
|
59
|
-
inputs.each { |hash| io << hash }
|
|
60
|
-
53534
|
|
61
|
-
end
|
|
62
|
-
assert_equal 53534, result
|
|
63
|
-
|
|
64
|
-
result = File.read(file_name)
|
|
65
|
-
assert_equal raw_json_data, result
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "stream" do
|
|
69
|
-
io_string = StringIO.new
|
|
70
|
-
result =
|
|
71
|
-
IOStreams::Line::Writer.stream(io_string) do |io|
|
|
72
|
-
IOStreams::Record::Writer.stream(io) do |stream|
|
|
73
|
-
inputs.each { |row| stream << row }
|
|
74
|
-
53534
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
assert_equal 53534, result
|
|
78
|
-
assert_equal raw_csv_data, io_string.string
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
data/test/row_reader_test.rb
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
|
|
3
|
-
class RowReaderTest < Minitest::Test
|
|
4
|
-
describe IOStreams::Row::Reader do
|
|
5
|
-
let :file_name do
|
|
6
|
-
File.join(File.dirname(__FILE__), "files", "test.csv")
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
let :expected do
|
|
10
|
-
CSV.read(file_name)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
describe "#each" do
|
|
14
|
-
it "file" do
|
|
15
|
-
rows = []
|
|
16
|
-
count = IOStreams::Row::Reader.file(file_name) do |io|
|
|
17
|
-
io.each { |row| rows << row }
|
|
18
|
-
end
|
|
19
|
-
assert_equal expected, rows
|
|
20
|
-
assert_equal expected.size, count
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "stream" do
|
|
24
|
-
rows = []
|
|
25
|
-
count = IOStreams::Line::Reader.file(file_name) do |file|
|
|
26
|
-
IOStreams::Row::Reader.stream(file) do |io|
|
|
27
|
-
io.each { |row| rows << row }
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
assert_equal expected, rows
|
|
31
|
-
assert_equal expected.size, count
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
data/test/row_writer_test.rb
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
require_relative "test_helper"
|
|
2
|
-
require "csv"
|
|
3
|
-
|
|
4
|
-
class RowWriterTest < Minitest::Test
|
|
5
|
-
describe IOStreams::Row::Writer do
|
|
6
|
-
let :csv_file_name do
|
|
7
|
-
File.join(File.dirname(__FILE__), "files", "test.csv")
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
let :raw_csv_data do
|
|
11
|
-
File.read(csv_file_name)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
let :csv_rows do
|
|
15
|
-
CSV.read(csv_file_name)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
let :temp_file do
|
|
19
|
-
Tempfile.new("iostreams")
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
let :file_name do
|
|
23
|
-
temp_file.path
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
after do
|
|
27
|
-
temp_file.delete
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
describe ".stream" do
|
|
31
|
-
it "file" do
|
|
32
|
-
result =
|
|
33
|
-
IOStreams::Row::Writer.file(file_name) do |io|
|
|
34
|
-
csv_rows.each { |array| io << array }
|
|
35
|
-
53534
|
|
36
|
-
end
|
|
37
|
-
assert_equal 53534, result
|
|
38
|
-
result = ::File.read(file_name)
|
|
39
|
-
assert_equal raw_csv_data, result
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "streams" do
|
|
43
|
-
io_string = StringIO.new
|
|
44
|
-
result =
|
|
45
|
-
IOStreams::Line::Writer.stream(io_string) do |io|
|
|
46
|
-
IOStreams::Row::Writer.stream(io) do |stream|
|
|
47
|
-
csv_rows.each { |array| stream << array }
|
|
48
|
-
53534
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
assert_equal 53534, result
|
|
52
|
-
assert_equal raw_csv_data, io_string.string
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|