iostreams 0.14.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +202 -0
  3. data/README.md +155 -47
  4. data/lib/io_streams/file/reader.rb +7 -8
  5. data/lib/io_streams/file/writer.rb +7 -8
  6. data/lib/io_streams/io_streams.rb +313 -129
  7. data/lib/io_streams/{delimited → line}/reader.rb +20 -30
  8. data/lib/io_streams/line/writer.rb +81 -0
  9. data/lib/io_streams/pgp.rb +4 -14
  10. data/lib/io_streams/record/reader.rb +55 -0
  11. data/lib/io_streams/record/writer.rb +63 -0
  12. data/lib/io_streams/row/reader.rb +60 -0
  13. data/lib/io_streams/row/writer.rb +62 -0
  14. data/lib/io_streams/s3.rb +25 -0
  15. data/lib/io_streams/s3/reader.rb +64 -0
  16. data/lib/io_streams/s3/writer.rb +13 -0
  17. data/lib/io_streams/streams.rb +1 -1
  18. data/lib/io_streams/tabular.rb +163 -0
  19. data/lib/io_streams/tabular/errors.rb +14 -0
  20. data/lib/io_streams/tabular/header.rb +146 -0
  21. data/lib/io_streams/tabular/parser/array.rb +26 -0
  22. data/lib/io_streams/tabular/parser/base.rb +12 -0
  23. data/lib/io_streams/tabular/parser/csv.rb +35 -0
  24. data/lib/io_streams/tabular/parser/fixed.rb +88 -0
  25. data/lib/io_streams/tabular/parser/hash.rb +21 -0
  26. data/lib/io_streams/tabular/parser/json.rb +25 -0
  27. data/lib/io_streams/tabular/parser/psv.rb +34 -0
  28. data/lib/io_streams/tabular/utility/csv_row.rb +115 -0
  29. data/lib/io_streams/version.rb +2 -2
  30. data/lib/io_streams/xlsx/reader.rb +1 -1
  31. data/lib/io_streams/zip/reader.rb +1 -1
  32. data/lib/io_streams/zip/writer.rb +1 -1
  33. data/lib/iostreams.rb +21 -10
  34. data/test/bzip2_reader_test.rb +21 -22
  35. data/test/bzip2_writer_test.rb +38 -32
  36. data/test/file_reader_test.rb +19 -18
  37. data/test/file_writer_test.rb +23 -22
  38. data/test/files/test.json +3 -0
  39. data/test/gzip_reader_test.rb +21 -22
  40. data/test/gzip_writer_test.rb +35 -29
  41. data/test/io_streams_test.rb +137 -61
  42. data/test/line_reader_test.rb +105 -0
  43. data/test/line_writer_test.rb +50 -0
  44. data/test/pgp_reader_test.rb +29 -29
  45. data/test/pgp_test.rb +149 -195
  46. data/test/pgp_writer_test.rb +63 -62
  47. data/test/record_reader_test.rb +61 -0
  48. data/test/record_writer_test.rb +73 -0
  49. data/test/row_reader_test.rb +34 -0
  50. data/test/row_writer_test.rb +51 -0
  51. data/test/tabular_test.rb +184 -0
  52. data/test/xlsx_reader_test.rb +13 -17
  53. data/test/zip_reader_test.rb +21 -22
  54. data/test/zip_writer_test.rb +40 -36
  55. metadata +41 -17
  56. data/lib/io_streams/csv/reader.rb +0 -21
  57. data/lib/io_streams/csv/writer.rb +0 -20
  58. data/lib/io_streams/delimited/writer.rb +0 -67
  59. data/test/csv_reader_test.rb +0 -34
  60. data/test/csv_writer_test.rb +0 -35
  61. data/test/delimited_reader_test.rb +0 -115
  62. data/test/delimited_writer_test.rb +0 -44
@@ -0,0 +1,105 @@
1
+ require_relative 'test_helper'
2
+
3
+ class LineReaderTest < Minitest::Test
4
+ describe IOStreams::Line::Reader do
5
+ let :file_name do
6
+ File.join(File.dirname(__FILE__), 'files', 'text.txt')
7
+ end
8
+
9
+ let :data do
10
+ data = []
11
+ File.open(file_name, 'rt') do |file|
12
+ while !file.eof?
13
+ data << file.readline.strip
14
+ end
15
+ end
16
+ data
17
+ end
18
+
19
+ describe '#initialize' do
20
+ it 'does not strip invalid characters' do
21
+ bad_lines = [
22
+ "New M\xE9xico,NE",
23
+ 'good line',
24
+ "New M\xE9xico,SF"
25
+ ]
26
+ input = StringIO.new(bad_lines.join("\n"))
27
+ lines = []
28
+ IOStreams::Line::Reader.open(input) do |io|
29
+ assert_equal false, io.strip_non_printable
30
+ assert_raises ArgumentError do
31
+ io.each { |line| lines << line }
32
+ end
33
+ end
34
+ end
35
+
36
+ it 'strips invalid characters' do
37
+ bad_lines = [
38
+ "New M\xE9xico,NE",
39
+ 'good line',
40
+ "New M\xE9xico,SF"
41
+ ]
42
+ fixed_lines = bad_lines.collect { |line| line.force_encoding('BINARY').gsub(/[^[:print:]|\r|\n]/, '') }
43
+ input = StringIO.new(bad_lines.join("\n"))
44
+ lines = []
45
+ IOStreams::Line::Reader.open(input, strip_non_printable: true) do |io|
46
+ assert_equal true, io.strip_non_printable
47
+ io.each { |line| lines << line }
48
+ end
49
+ assert_equal fixed_lines, lines
50
+ end
51
+ end
52
+
53
+ describe '#each' do
54
+ it 'each_line file' do
55
+ lines = []
56
+ IOStreams::Line::Reader.open(file_name) do |io|
57
+ io.each { |line| lines << line }
58
+ end
59
+ assert_equal data, lines
60
+ end
61
+
62
+ it 'each_line stream' do
63
+ lines = []
64
+ File.open(file_name) do |file|
65
+ IOStreams::Line::Reader.open(file) do |io|
66
+ io.each { |line| lines << line }
67
+ end
68
+ end
69
+ assert_equal data, lines
70
+ end
71
+
72
+ ["\r\n", "\n\r", "\n", "\r"].each do |delimiter|
73
+ it "autodetect delimiter: #{delimiter.inspect}" do
74
+ lines = []
75
+ stream = StringIO.new(data.join(delimiter))
76
+ IOStreams::Line::Reader.open(stream, buffer_size: 15) do |io|
77
+ io.each { |line| lines << line }
78
+ end
79
+ assert_equal data, lines
80
+ end
81
+ end
82
+
83
+ ['@', 'BLAH'].each do |delimiter|
84
+ it "reads delimited #{delimiter.inspect}" do
85
+ lines = []
86
+ stream = StringIO.new(data.join(delimiter))
87
+ IOStreams::Line::Reader.open(stream, buffer_size: 15, delimiter: delimiter) do |io|
88
+ io.each { |line| lines << line }
89
+ end
90
+ assert_equal data, lines
91
+ end
92
+ end
93
+
94
+ it 'reads binary delimited' do
95
+ delimiter = "\x01"
96
+ lines = []
97
+ stream = StringIO.new(data.join(delimiter))
98
+ IOStreams::Line::Reader.open(stream, buffer_size: 15, delimiter: delimiter, encoding: IOStreams::BINARY_ENCODING) do |io|
99
+ io.each { |line| lines << line }
100
+ end
101
+ assert_equal data, lines
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,50 @@
1
+ require_relative 'test_helper'
2
+
3
+ class DelimitedWriterTest < Minitest::Test
4
+ describe IOStreams::Line::Writer do
5
+ let :file_name do
6
+ File.join(File.dirname(__FILE__), 'files', 'text.txt')
7
+ end
8
+
9
+ let :raw do
10
+ File.read(file_name)
11
+ end
12
+
13
+ let :lines do
14
+ raw.lines.map(&:strip)
15
+ end
16
+
17
+ describe '#<<' do
18
+ it 'file' do
19
+ temp_file = Tempfile.new('rocket_job')
20
+ file_name = temp_file.to_path
21
+ IOStreams::Line::Writer.open(file_name) do |io|
22
+ lines.each { |line| io << line }
23
+ end
24
+ result = File.read(file_name)
25
+ assert_equal raw, result
26
+ end
27
+
28
+ it 'stream' do
29
+ io_string = StringIO.new
30
+ IOStreams::Line::Writer.open(io_string) do |io|
31
+ lines.each { |line| io << line }
32
+ end
33
+ assert_equal raw, io_string.string
34
+ end
35
+ end
36
+
37
+ describe '.write' do
38
+ it 'returns byte count' do
39
+ io_string = StringIO.new
40
+ count = 0
41
+ IOStreams::Line::Writer.open(io_string) do |io|
42
+ lines.each { |line| count += io.write(line) }
43
+ end
44
+ assert_equal raw, io_string.string
45
+ assert_equal raw.size, count
46
+ end
47
+ end
48
+
49
+ end
50
+ end
@@ -1,44 +1,44 @@
1
1
  require_relative 'test_helper'
2
2
 
3
- module Streams
4
- class PgpReaderTest < Minitest::Test
5
- describe IOStreams::Pgp::Reader do
6
- before do
7
- file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt')
8
- @data = File.read(file_name)
9
- @temp_file = Tempfile.new('iostreams')
10
- @file_name = @temp_file.to_path
11
- end
3
+ class PgpReaderTest < Minitest::Test
4
+ describe IOStreams::Pgp::Reader do
5
+ let :temp_file do
6
+ Tempfile.new('iostreams')
7
+ end
12
8
 
13
- after do
14
- @temp_file.delete if @temp_file
15
- end
9
+ let :decrypted do
10
+ file_name = File.join(File.dirname(__FILE__), 'files', 'text.txt')
11
+ File.read(file_name)
12
+ end
16
13
 
17
- describe '.open' do
18
- it 'reads encrypted file' do
19
- IOStreams::Pgp::Writer.open(@file_name, recipient: 'receiver@example.org') do |io|
20
- io.write(@data)
21
- end
14
+ after do
15
+ temp_file.delete
16
+ end
22
17
 
23
- result = IOStreams::Pgp::Reader.open(@file_name, passphrase: 'receiver_passphrase') { |file| file.read }
24
- assert_equal @data, result
18
+ describe '.open' do
19
+ it 'reads encrypted file' do
20
+ IOStreams::Pgp::Writer.open(temp_file.path, recipient: 'receiver@example.org') do |io|
21
+ io.write(decrypted)
25
22
  end
26
23
 
27
- it 'fails with bad passphrase' do
28
- assert_raises IOStreams::Pgp::Failure do
29
- IOStreams::Pgp::Reader.open(@file_name, passphrase: 'BAD') { |file| file.read }
30
- end
31
- end
24
+ result = IOStreams::Pgp::Reader.open(temp_file.path, passphrase: 'receiver_passphrase') { |file| file.read }
25
+ assert_equal decrypted, result
26
+ end
32
27
 
33
- it 'fails with stream input' do
34
- io = StringIO.new
35
- assert_raises NotImplementedError do
36
- IOStreams::Pgp::Reader.open(io, passphrase: 'BAD') { |file| file.read }
37
- end
28
+ it 'fails with bad passphrase' do
29
+ assert_raises IOStreams::Pgp::Failure do
30
+ IOStreams::Pgp::Reader.open(temp_file.path, passphrase: 'BAD') { |file| file.read }
38
31
  end
32
+ end
39
33
 
34
+ it 'fails with stream input' do
35
+ io = StringIO.new
36
+ assert_raises NotImplementedError do
37
+ IOStreams::Pgp::Reader.open(io, passphrase: 'BAD') { |file| file.read }
38
+ end
40
39
  end
41
40
 
42
41
  end
42
+
43
43
  end
44
44
  end
data/test/pgp_test.rb CHANGED
@@ -2,250 +2,204 @@ require_relative 'test_helper'
2
2
 
3
3
  #IOStreams::Pgp.logger = Logger.new(STDOUT)
4
4
 
5
- module Streams
6
- class PgpTest < Minitest::Test
7
- describe IOStreams::Pgp do
8
- let :user_name do
9
- 'Joe Bloggs'
10
- end
5
+ class PgpTest < Minitest::Test
6
+ describe IOStreams::Pgp do
7
+ let :user_name do
8
+ 'Joe Bloggs'
9
+ end
11
10
 
12
- let :email do
13
- 'pgp_test@iostreams.net'
14
- end
11
+ let :email do
12
+ 'pgp_test@iostreams.net'
13
+ end
15
14
 
16
- let :passphrase do
17
- 'hello'
18
- end
15
+ let :passphrase do
16
+ 'hello'
17
+ end
19
18
 
20
- let :generated_key_id do
21
- IOStreams::Pgp.generate_key(name: user_name, email: email, key_length: 1024, passphrase: passphrase)
22
- end
19
+ let :generated_key_id do
20
+ IOStreams::Pgp.generate_key(name: user_name, email: email, key_length: 1024, passphrase: passphrase)
21
+ end
23
22
 
24
- let :public_key do
25
- generated_key_id
26
- IOStreams::Pgp.export(email: email)
23
+ let :public_key do
24
+ generated_key_id
25
+ IOStreams::Pgp.export(email: email)
26
+ end
27
+
28
+ before do
29
+ # There is a timing issue with creating and then deleting keys.
30
+ # Call list_keys again to give GnuPGP time.
31
+ IOStreams::Pgp.list_keys(email: email, private: true)
32
+ 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
+ end
36
+
37
+ describe '.pgp_version' do
38
+ it 'returns pgp version' do
39
+ assert IOStreams::Pgp.pgp_version
27
40
  end
41
+ end
28
42
 
29
- let :private_key do
30
- generated_key_id
31
- IOStreams::Pgp.export(email: email, private: true, passphrase: passphrase)
43
+ describe '.generate_key' do
44
+ it 'returns the key id' do
45
+ assert generated_key_id
32
46
  end
47
+ end
33
48
 
49
+ describe '.has_key?' do
34
50
  before do
35
- #ap IOStreams::Pgp.list_keys(email: email, private: true)
36
- IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
37
- #ap "KEYS DELETED"
38
- #ap IOStreams::Pgp.list_keys(email: email, private: true)
51
+ generated_key_id
52
+ # There is a timing issue with creating and then immediately using keys.
53
+ # Call list_keys again to give GnuPGP time.
54
+ IOStreams::Pgp.list_keys(email: email)
39
55
  end
40
56
 
41
- describe '.pgp_version' do
42
- it 'returns pgp version' do
43
- assert IOStreams::Pgp.pgp_version
44
- end
57
+ it 'confirms public key' do
58
+ assert IOStreams::Pgp.has_key?(key_id: generated_key_id)
45
59
  end
46
60
 
47
- describe '.generate_key' do
48
- it 'returns the key id' do
49
- assert generated_key_id
50
- end
61
+ it 'confirms private key' do
62
+ assert IOStreams::Pgp.has_key?(key_id: generated_key_id, private: true)
51
63
  end
64
+ end
52
65
 
53
- describe '.has_key?' do
54
- before do
55
- generated_key_id
56
- end
66
+ describe '.delete_keys' do
67
+ it 'handles no keys' do
68
+ refute IOStreams::Pgp.delete_keys(email: 'random@iostreams.net', public: true, private: true)
69
+ end
57
70
 
58
- it 'confirms public key' do
59
- assert IOStreams::Pgp.has_key?(key_id: generated_key_id)
60
- end
71
+ it 'deletes existing keys' do
72
+ generated_key_id
73
+ # There is a timing issue with creating and then deleting keys.
74
+ # Call list_keys again to give GnuPGP time.
75
+ IOStreams::Pgp.list_keys(email: email, private: true)
76
+ assert IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
77
+ end
61
78
 
62
- it 'confirms private key' do
63
- assert IOStreams::Pgp.has_key?(key_id: generated_key_id, private: true)
64
- end
79
+ it 'deletes just the private key' do
80
+ generated_key_id
81
+ # There is a timing issue with creating and then deleting keys.
82
+ # Call list_keys again to give GnuPGP time.
83
+ IOStreams::Pgp.list_keys(email: email, private: true)
84
+ assert IOStreams::Pgp.delete_keys(email: email, public: false, private: true)
85
+ refute IOStreams::Pgp.has_key?(key_id: generated_key_id, private: true)
86
+ assert IOStreams::Pgp.has_key?(key_id: generated_key_id, private: false)
65
87
  end
88
+ end
66
89
 
67
- describe '.delete_keys' do
68
- it 'handles no keys' do
69
- refute IOStreams::Pgp.delete_keys(email: 'random@iostreams.net', public: true, private: true)
70
- end
90
+ describe '.export' do
91
+ before do
92
+ generated_key_id
93
+ end
71
94
 
72
- it 'deletes existing keys' do
73
- generated_key_id
74
- assert IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
75
- end
95
+ it 'exports public keys by email' do
96
+ assert ascii_keys = IOStreams::Pgp.export(email: email)
97
+ assert ascii_keys =~ /BEGIN PGP PUBLIC KEY BLOCK/, ascii_keys
98
+ end
76
99
 
77
- it 'deletes just the private key' do
78
- generated_key_id
79
- assert IOStreams::Pgp.delete_keys(email: email, public: false, private: true)
80
- refute IOStreams::Pgp.has_key?(key_id: generated_key_id, private: true)
81
- assert IOStreams::Pgp.has_key?(key_id: generated_key_id, private: false)
82
- end
100
+ it 'exports public keys as binary' do
101
+ assert keys = IOStreams::Pgp.export(email: email, ascii: false)
102
+ refute keys =~ /BEGIN PGP (PUBLIC|PRIVATE) KEY BLOCK/, keys
83
103
  end
104
+ end
84
105
 
85
- describe '.export' do
86
- before do
87
- generated_key_id
88
- end
106
+ describe '.list_keys' do
107
+ before do
108
+ generated_key_id
109
+ # There is a timing issue with creating and then immediately using keys.
110
+ # Call list_keys again to give GnuPGP time.
111
+ IOStreams::Pgp.list_keys(email: email)
112
+ end
89
113
 
90
- it 'exports public keys by email' do
91
- assert ascii_keys = IOStreams::Pgp.export(email: email)
92
- assert ascii_keys =~ /BEGIN PGP PUBLIC KEY BLOCK/, ascii_keys
114
+ it 'lists public keys' do
115
+ assert keys = IOStreams::Pgp.list_keys(email: email)
116
+ assert_equal 1, keys.size
117
+ assert key = keys.first
118
+
119
+ assert_equal Date.today, key[:date]
120
+ assert_equal email, key[:email]
121
+ assert_includes key[:key_id], generated_key_id
122
+ assert_equal 1024, key[:key_length]
123
+ assert_includes ['R', 'rsa'], key[:key_type]
124
+ assert_equal user_name, key[:name]
125
+ refute key[:private], key
126
+ ver = IOStreams::Pgp.pgp_version
127
+ maint = ver.split('.').last.to_i
128
+ if (ver.to_f >= 2) && (maint >= 30)
129
+ assert_equal 'ultimate', key[:trust]
93
130
  end
131
+ end
94
132
 
95
- it 'exports private keys by email' do
96
- assert ascii_keys = IOStreams::Pgp.export(email: email, private: true, passphrase: passphrase)
97
- assert ascii_keys =~ /BEGIN PGP PRIVATE KEY BLOCK/, ascii_keys
98
- end
133
+ it 'lists private keys' do
134
+ assert keys = IOStreams::Pgp.list_keys(email: email, private: true)
135
+ assert_equal 1, keys.size
136
+ assert key = keys.first
137
+
138
+ assert_equal Date.today, key[:date]
139
+ assert_equal email, key[:email]
140
+ assert_includes key[:key_id], generated_key_id
141
+ assert_equal 1024, key[:key_length]
142
+ assert_includes ['R', 'rsa'], key[:key_type]
143
+ assert_equal user_name, key[:name]
144
+ assert key[:private], key
145
+ end
146
+ end
99
147
 
100
- it 'exports public keys as binary' do
101
- assert keys = IOStreams::Pgp.export(email: email, ascii: false)
102
- refute keys =~ /BEGIN PGP (PUBLIC|PRIVATE) KEY BLOCK/, keys
103
- end
148
+ describe '.key_info' do
149
+ it 'extracts public key info' do
150
+ assert keys = IOStreams::Pgp.key_info(key: public_key)
151
+ assert_equal 1, keys.size
152
+ assert key = keys.first
153
+
154
+ assert_equal Date.today, key[:date]
155
+ assert_equal email, key[:email]
156
+ assert_includes key[:key_id], generated_key_id
157
+ assert_equal 1024, key[:key_length]
158
+ assert_includes ['R', 'rsa'], key[:key_type]
159
+ assert_equal user_name, key[:name]
160
+ refute key[:private], key
161
+ refute key.key?(:trust)
162
+ end
163
+ end
104
164
 
105
- it 'exports private keys as binary' do
106
- assert keys = IOStreams::Pgp.export(email: email, ascii: false, private: true, passphrase: passphrase)
107
- refute keys =~ /BEGIN PGP (PUBLIC|PRIVATE) KEY BLOCK/, keys
108
- end
165
+ describe '.import' do
166
+ it 'handle duplicate public key' do
167
+ generated_key_id
168
+ assert_equal [], IOStreams::Pgp.import(key: public_key)
109
169
  end
110
170
 
111
- describe '.list_keys' do
171
+ describe 'without keys' do
112
172
  before do
113
- generated_key_id
173
+ @public_key = public_key
174
+ # There is a timing issue with creating and then deleting keys.
175
+ # Call list_keys again to give GnuPGP time.
176
+ IOStreams::Pgp.list_keys(email: email, private: true)
177
+ IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
114
178
  end
115
179
 
116
- it 'lists public keys' do
117
- assert keys = IOStreams::Pgp.list_keys(email: email)
180
+ it 'imports ascii public key' do
181
+ assert keys = IOStreams::Pgp.import(key: @public_key)
118
182
  assert_equal 1, keys.size
119
183
  assert key = keys.first
120
184
 
121
- assert_equal Date.today, key[:date]
122
185
  assert_equal email, key[:email]
123
- assert_includes key[:key_id], generated_key_id
124
- assert_equal 1024, key[:key_length]
125
- assert_includes ['R', 'rsa'], key[:key_type]
186
+ assert_equal generated_key_id, key[:key_id]
126
187
  assert_equal user_name, key[:name]
127
188
  refute key[:private], key
128
- ver = IOStreams::Pgp.pgp_version
129
- maint = ver.split('.').last.to_i
130
- if (ver.to_f >= 2) && (maint >= 30)
131
- assert_equal 'ultimate', key[:trust]
132
- end
133
189
  end
134
190
 
135
- it 'lists private keys' do
136
- assert keys = IOStreams::Pgp.list_keys(email: email, private: true)
191
+ it 'imports binary public key' do
192
+ assert keys = IOStreams::Pgp.import(key: @public_key)
137
193
  assert_equal 1, keys.size
138
194
  assert key = keys.first
139
195
 
140
- assert_equal Date.today, key[:date]
141
196
  assert_equal email, key[:email]
142
- assert_includes key[:key_id], generated_key_id
143
- assert_equal 1024, key[:key_length]
144
- assert_includes ['R', 'rsa'], key[:key_type]
145
- assert_equal user_name, key[:name]
146
- assert key[:private], key
147
- end
148
- end
149
-
150
- describe '.key_info' do
151
- it 'extracts public key info' do
152
- assert keys = IOStreams::Pgp.key_info(key: public_key)
153
- assert_equal 1, keys.size
154
- assert key = keys.first
155
-
156
- assert_equal Date.today, key[:date]
157
- assert_equal email, key[:email]
158
- assert_includes key[:key_id], generated_key_id
159
- assert_equal 1024, key[:key_length]
160
- assert_includes ['R', 'rsa'], key[:key_type]
197
+ assert_equal generated_key_id, key[:key_id]
161
198
  assert_equal user_name, key[:name]
162
199
  refute key[:private], key
163
- refute key.key?(:trust)
164
- end
165
-
166
- it 'extracts private key info' do
167
- skip 'GnuPG v2.1 and above does not allow batch inspection of private keys' if IOStreams::Pgp.pgp_version.to_f >= 2.1
168
- assert keys = IOStreams::Pgp.key_info(key: private_key)
169
- assert_equal 1, keys.size
170
- assert key = keys.first
171
-
172
- assert_equal Date.today, key[:date]
173
- assert_equal email, key[:email]
174
- assert_includes key[:key_id], generated_key_id
175
- assert_equal 1024, key[:key_length]
176
- assert_equal 'R', key[:key_type]
177
- assert_equal user_name, key[:name]
178
- assert key[:private], key
179
- refute key.key?(:trust)
180
200
  end
181
201
  end
182
-
183
- describe '.import' do
184
- it 'handle duplicate public key' do
185
- generated_key_id
186
- assert_equal [], IOStreams::Pgp.import(key: public_key)
187
- end
188
-
189
- it 'handle duplicate private key' do
190
- generated_key_id
191
- assert_equal [], IOStreams::Pgp.import(key: private_key)
192
- end
193
-
194
- describe 'without keys' do
195
- before do
196
- @public_key = public_key
197
- @private_key = private_key
198
- IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
199
- end
200
-
201
- it 'imports ascii public key' do
202
- assert keys = IOStreams::Pgp.import(key: @public_key)
203
- assert_equal 1, keys.size
204
- assert key = keys.first
205
-
206
- assert_equal email, key[:email]
207
- assert_equal generated_key_id, key[:key_id]
208
- assert_equal user_name, key[:name]
209
- refute key[:private], key
210
- end
211
-
212
- it 'imports ascii private key' do
213
- skip 'GnuPG v2.1 and above does not allow batch import of private keys' if IOStreams::Pgp.pgp_version.to_f >= 2.1
214
- assert keys = IOStreams::Pgp.import(key: @private_key)
215
- assert_equal 1, keys.size
216
- assert key = keys.first
217
-
218
- assert_equal email, key[:email]
219
- assert_equal generated_key_id, key[:key_id]
220
- assert_equal user_name, key[:name]
221
- assert key[:private], key
222
- end
223
-
224
- it 'imports binary public key' do
225
- assert keys = IOStreams::Pgp.import(key: @public_key)
226
- assert_equal 1, keys.size
227
- assert key = keys.first
228
-
229
- assert_equal email, key[:email]
230
- assert_equal generated_key_id, key[:key_id]
231
- assert_equal user_name, key[:name]
232
- refute key[:private], key
233
- end
234
-
235
- it 'imports binary private key' do
236
- skip 'GnuPG v2.1 and above does not allow batch import of private keys' if IOStreams::Pgp.pgp_version.to_f >= 2.1
237
- assert keys = IOStreams::Pgp.import(key: @private_key)
238
- assert_equal 1, keys.size
239
- assert key = keys.first
240
-
241
- assert_equal email, key[:email]
242
- assert_equal generated_key_id, key[:key_id]
243
- assert_equal user_name, key[:name]
244
- assert key[:private], key
245
- end
246
- end
247
- end
248
-
249
202
  end
203
+
250
204
  end
251
205
  end