gpgme-loongson 2.0.18

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.
@@ -0,0 +1,142 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::Data do
5
+ describe :new do
6
+ it "smartly creates an empty buffer if nothing passed" do
7
+ data = GPGME::Data.new
8
+ assert_instance_of GPGME::Data, data
9
+ assert_respond_to data, :read
10
+ assert_respond_to data, :write
11
+ end
12
+
13
+ it "doesn't create a new object if the object passed is a Data already" do
14
+ data = GPGME::Data.new
15
+ new_data = GPGME::Data.new(data)
16
+
17
+ assert_equal data, new_data
18
+ end
19
+
20
+ it "creates a data from strings" do
21
+ data = GPGME::Data.new("wadus")
22
+ assert_equal "wadus", data.read
23
+ end
24
+
25
+ it "creates a data from a file" do
26
+ # magic fromfile
27
+ data = GPGME::Data.new(File.open(__FILE__))
28
+ assert_match /magic fromfile/, data.read
29
+ end
30
+
31
+ it "creates a data from file descriptor" do
32
+ # magic filedescriptor
33
+ File.open(__FILE__) do |f|
34
+ data = GPGME::Data.new(f.fileno)
35
+ assert_match /magic filedescriptor/, data.read
36
+ end
37
+ end
38
+ end
39
+
40
+ describe :read do
41
+ it "allows to read only a length of the object" do
42
+ data = GPGME::Data.new("wadus")
43
+ assert_equal "wad", data.read(3)
44
+ end
45
+
46
+ it "returns nil if reading 0 length" do
47
+ data = GPGME::Data.new("wadus")
48
+ assert_nil data.read(0)
49
+ end
50
+
51
+ it "returns the full thing if reading without parameter" do
52
+ data = GPGME::Data.new("wadus")
53
+ assert_equal "wadus", data.read
54
+ end
55
+ end
56
+
57
+ ##
58
+ # We consider seek tested by these ones, since we have to seek(0) before
59
+ # reading.
60
+ describe :write do
61
+ it "writes data to it" do
62
+ data = GPGME::Data.new
63
+ data.write("wadus")
64
+ data.seek(0)
65
+ assert_equal "wadus", data.read
66
+ end
67
+
68
+ it "writes data to it, specifying the length of the things to write" do
69
+ data = GPGME::Data.new
70
+ data.write("wadus", 5)
71
+ data.seek(0)
72
+ assert_equal "wadus", data.read
73
+ end
74
+
75
+ it "writes only a limited part if specified a small number" do
76
+ data = GPGME::Data.new
77
+ data.write("wadus", 3)
78
+ data.seek(0)
79
+ assert_equal "wad", data.read
80
+ end
81
+
82
+ # TODO: test doesn't pass, I believe there might be a security issue here,
83
+ # random crap is written to the buffer if a longer size is passed.
84
+ #
85
+ # it "writes only the full data passed even if the length is bigger" do
86
+ # data = GPGME::Data.new
87
+ # data.write("wadus", 100)
88
+ # data.seek(0)
89
+ # assert_equal "wadus", data.read
90
+ # end
91
+ end
92
+
93
+ describe :encoding do
94
+ it "has encoding 0 by default (DATA_ENCODING_NONE)" do
95
+ data = GPGME::Data.new("wadus")
96
+ assert_equal GPGME::DATA_ENCODING_NONE, data.encoding
97
+ end
98
+
99
+ it "can set encodings" do
100
+ data = GPGME::Data.new("wadus")
101
+ [ GPGME::DATA_ENCODING_ARMOR, GPGME::DATA_ENCODING_BASE64,
102
+ GPGME::DATA_ENCODING_BINARY,GPGME::DATA_ENCODING_NONE ].each do |encoding|
103
+ data.encoding = encoding
104
+ assert_equal encoding, data.encoding
105
+ end
106
+ end
107
+
108
+ it "breaks if not set a proper encoding value" do
109
+ data = GPGME::Data.new("wadus")
110
+ assert_raises GPGME::Error::InvalidValue do
111
+ data.encoding = 64
112
+ end
113
+ end
114
+ end
115
+
116
+ describe :file_name do
117
+ it "has no name by default" do
118
+ data = GPGME::Data.new("wadus")
119
+ assert_nil data.file_name
120
+ end
121
+
122
+ it "can set file_name" do
123
+ data = GPGME::Data.new("wadus")
124
+ [ "foo.bar", nil ].each do |file_name|
125
+ data.file_name = file_name
126
+ assert_equal file_name, data.file_name
127
+ end
128
+ end
129
+ end
130
+
131
+ describe :to_s do
132
+ it "returns the entire content of data" do
133
+ data = GPGME::Data.new("wadus")
134
+ data.read
135
+ old_pos = data.seek(0, IO::SEEK_CUR)
136
+ assert_equal "wadus", data.to_s
137
+ new_pos = data.seek(0, IO::SEEK_CUR)
138
+ assert_equal old_pos, new_pos
139
+ end
140
+ end
141
+ end
142
+
@@ -0,0 +1,52 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.11 (Darwin)
3
+
4
+ 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
51
+ =T/Ce
52
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,54 @@
1
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
2
+ Version: GnuPG v1.4.11 (Darwin)
3
+
4
+ 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
52
+ u+DMAdQjSwNi0/7uqGbnAyZuRpBaKWJu9s4YRdU=
53
+ =kQA4
54
+ -----END PGP PRIVATE KEY BLOCK-----
@@ -0,0 +1,12 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME do
5
+ it "should pass" do
6
+ assert true
7
+ end
8
+
9
+ it "should also pass" do
10
+ assert true
11
+ end
12
+ end
@@ -0,0 +1,209 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::Key do
5
+ before do
6
+ skip unless ensure_keys GPGME::PROTOCOL_OpenPGP
7
+ end
8
+
9
+ it "has certain attributes" do
10
+ key = GPGME::Key.find(:secret).first
11
+ [:keylist_mode, :protocol, :owner_trust, :issuer_serial,
12
+ :issuer_name, :chain_id, :subkeys, :uids].each do |attrib|
13
+ assert key.respond_to?(attrib), "Key doesn't respond to #{attrib}"
14
+ end
15
+ end
16
+
17
+ it "won't allow the creation of GPGME::Key's without the C API" do
18
+ assert_raises NoMethodError do
19
+ GPGME::Key.new
20
+ end
21
+ end
22
+
23
+ it "can compare one with another even though if they're not the same object" do
24
+ key1 = GPGME::Key.find(:secret).first
25
+ key2 = GPGME::Key.find(:secret).first
26
+ refute_equal key1.object_id, key2.object_id
27
+ assert_equal key1, key2
28
+ end
29
+
30
+ it "can compare a key with any other object" do
31
+ key1 = GPGME::Key.find(:secret).first
32
+ refute_equal key1, nil
33
+ end
34
+
35
+ describe :find do
36
+ it "should return all by default" do
37
+ keys = GPGME::Key.find :secret
38
+ assert_instance_of GPGME::Key, keys.first
39
+ assert 0 < keys.size
40
+ end
41
+
42
+ it "returns an array even if you pass only one descriptor" do
43
+ keys_one = GPGME::Key.find(:secret, KEYS.first[:sha]).map{|key| key.subkeys.map(&:keyid)}
44
+ keys_array = GPGME::Key.find(:secret, [KEYS.first[:sha]]).map{|key| key.subkeys.map(&:keyid)}
45
+ assert_equal keys_one, keys_array
46
+ end
47
+
48
+ it "returns only secret keys if told to do so" do
49
+ keys = GPGME::Key.find :secret
50
+ assert keys.all?(&:secret?)
51
+ end
52
+
53
+ it "returns only public keys if told to do so" do
54
+ keys = GPGME::Key.find :public
55
+ assert keys.none?(&:secret?)
56
+ end
57
+
58
+ it "filters by capabilities" do
59
+ GPGME::Key.any_instance.stubs(:usable_for?).returns(false)
60
+ keys = GPGME::Key.find :public, "", :wadusing
61
+ assert keys.empty?
62
+ end
63
+ end
64
+
65
+ describe :export do
66
+ # Testing the lazy way with expectations. I think tests in
67
+ # the Ctx class are enough.
68
+ it "exports any key that matches the pattern" do
69
+ GPGME::Ctx.any_instance.expects(:export_keys).with("", anything)
70
+ GPGME::Key.export("")
71
+ end
72
+
73
+ it "exports any key that matches the pattern, can specify output" do
74
+ data = GPGME::Data.new
75
+ GPGME::Ctx.any_instance.expects(:export_keys).with("wadus", data)
76
+ ret = GPGME::Key.export("wadus", :output => data)
77
+ assert_equal data, ret
78
+ end
79
+
80
+ it "can specify options for Ctx" do
81
+ GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:export_keys => true))
82
+ GPGME::Key.export("wadus", :armor => true)
83
+ end
84
+ end
85
+
86
+ describe "#export" do
87
+ it "can export from the key instance" do
88
+ key = GPGME::Key.find(:public).first
89
+ GPGME::Key.expects(:export).with(key.sha, {})
90
+
91
+ key.export
92
+ end
93
+
94
+ it "can export from the key instance passing variables" do
95
+ key = GPGME::Key.find(:public).first
96
+ GPGME::Key.expects(:export).with(key.sha, {:armor => true})
97
+
98
+ key.export :armor => true
99
+ end
100
+ end
101
+
102
+ describe :import do
103
+ it "can import keys" do
104
+ data = GPGME::Data.new
105
+ GPGME::Ctx.any_instance.expects(:import_keys).with(data)
106
+ GPGME::Ctx.any_instance.expects(:import_result).returns("wadus")
107
+
108
+ assert_equal "wadus", GPGME::Key.import(data)
109
+ end
110
+
111
+ it "can specify options for Ctx" do
112
+ GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:import_keys => true, :import_result => true))
113
+ GPGME::Key.import("wadus", :armor => true)
114
+ end
115
+ end
116
+
117
+ # describe :trust do
118
+ # it "returns :revoked if it is so"
119
+ # it "returns :expired if it is expired"
120
+ # it "returns :disabled if it is so"
121
+ # it "returns :invalid if it is so"
122
+ # it "returns nil otherwise"
123
+ # end
124
+
125
+ # describe :capability do
126
+ # it "returns an array of possible capabilities"
127
+ # end
128
+
129
+ # describe :secret? do
130
+ # "returns true/false depending on the instance variable"
131
+ # end
132
+
133
+ describe :usable_for? do
134
+ it "checks for the capabilities of the key and returns true if it matches all" do
135
+ key = GPGME::Key.find(:secret).first
136
+
137
+ key.stubs(:capability).returns([:encrypt, :sign])
138
+ assert key.usable_for?([])
139
+
140
+ key.stubs(:capability).returns([:encrypt, :sign])
141
+ assert key.usable_for?([:encrypt])
142
+
143
+ key.stubs(:capability).returns([:encrypt, :sign])
144
+ refute key.usable_for?([:certify])
145
+ end
146
+
147
+ it "returns false if the key is expired or revoked or disabled or disabled" do
148
+ key = GPGME::Key.find(:secret).first
149
+ key.stubs(:trust).returns(:revoked)
150
+ key.stubs(:capability).returns([:encrypt, :sign])
151
+ refute key.usable_for?([:encrypt])
152
+ end
153
+ end
154
+
155
+ describe :delete! do
156
+ it "deletes the key itself and its secret one if called with true" do
157
+ begin
158
+ key = KEYS.first
159
+ GPGME::Key.find(:public, key[:sha]).first.delete!(true)
160
+
161
+ assert_empty GPGME::Key.find(:public, key[:sha])
162
+ assert_empty GPGME::Key.find(:secret, key[:sha])
163
+ ensure
164
+ import_key key
165
+ end
166
+ end
167
+
168
+ it "raises GPGME::Error::Conflict if we're deleting a key that is secret" do
169
+ key = KEYS.first
170
+ assert_raises GPGME::Error::Conflict do
171
+ GPGME::Key.find(:secret, key[:sha]).first.delete!
172
+ end
173
+ refute_empty GPGME::Key.find(:secret, key[:sha])
174
+ end
175
+ end
176
+
177
+ it "knows if the key is expired" do
178
+ key = GPGME::Key.find(:secret).first
179
+ refute key.expired
180
+
181
+ with_key EXPIRED_KEY do
182
+ key = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first
183
+ assert key.expired
184
+ end
185
+ end
186
+
187
+ it "returns the expiry date of the first subkey" do
188
+ key = GPGME::Key.find(:secret).first
189
+ subkey = key.primary_subkey
190
+ subkey.expects(:expired).returns(true)
191
+
192
+ assert key.expired
193
+ end
194
+
195
+ describe :inspect do
196
+ it "can be inspected" do
197
+ key = GPGME::Key.find(:secret).first
198
+ key.inspect
199
+ end
200
+ end
201
+
202
+ describe :to_s do
203
+ it "can be coerced into a String" do
204
+ key = GPGME::Key.find(:secret).first
205
+ key.to_s
206
+ end
207
+ end
208
+ end
209
+