nexus-debug 1.4.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 +7 -0
- data/MIT-LICENSE +22 -0
- data/Rakefile +18 -0
- data/bin/nbundle +5 -0
- data/lib/commands/abstract_command.rb +225 -0
- data/lib/commands/nexus.rb +137 -0
- data/lib/nexus/cipher.rb +53 -0
- data/lib/nexus/config.rb +195 -0
- data/lib/nexus/config_file.rb +120 -0
- data/lib/nexus/version.rb +3 -0
- data/lib/rubygems_plugin.rb +6 -0
- data/test/abstract_command_test.rb +248 -0
- data/test/cipher_test.rb +68 -0
- data/test/command_helper.rb +55 -0
- data/test/config_test.rb +117 -0
- data/test/configfile_test.rb +78 -0
- data/test/nexus_command_test.rb +365 -0
- metadata +157 -0
@@ -0,0 +1,120 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rubygems/local_remote_options'
|
3
|
+
require 'net/http'
|
4
|
+
require 'base64'
|
5
|
+
require 'nexus/cipher'
|
6
|
+
require 'yaml'
|
7
|
+
|
8
|
+
module Nexus
|
9
|
+
class ConfigFile
|
10
|
+
def initialize(configfile)
|
11
|
+
raise 'no file given' unless configfile
|
12
|
+
|
13
|
+
@all = {}
|
14
|
+
if configfile.is_a?(String)
|
15
|
+
@file = configfile
|
16
|
+
|
17
|
+
if File.exist?(configfile)
|
18
|
+
@all = YAML.load(::File.read(configfile))
|
19
|
+
else
|
20
|
+
store # make sure we can write it
|
21
|
+
end
|
22
|
+
elsif configfile
|
23
|
+
@file = configfile.file
|
24
|
+
@all = configfile.all
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_reader :all, :file
|
29
|
+
|
30
|
+
def data(repo)
|
31
|
+
if repo
|
32
|
+
(@all[repo] ||= {})
|
33
|
+
else
|
34
|
+
@all
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def key?(key, repo = nil)
|
39
|
+
data(repo).key? key
|
40
|
+
end
|
41
|
+
|
42
|
+
def [](key, repo = nil)
|
43
|
+
data(repo)[key]
|
44
|
+
end
|
45
|
+
|
46
|
+
def []=(key, repo, value)
|
47
|
+
if value.nil?
|
48
|
+
data(repo).delete(key)
|
49
|
+
else
|
50
|
+
data(repo)[key] = value
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def repos
|
55
|
+
all.collect do |k, v|
|
56
|
+
k if v.is_a? Hash
|
57
|
+
end.select { |s| s }
|
58
|
+
end
|
59
|
+
|
60
|
+
def section(key)
|
61
|
+
all.dup.select do |k, v|
|
62
|
+
if v.is_a? Hash
|
63
|
+
v.delete_if { |kk, _vv| kk != key }
|
64
|
+
else
|
65
|
+
k == key
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def delete(*keys)
|
71
|
+
delete_map(all, *keys)
|
72
|
+
all.each do |_k, v|
|
73
|
+
delete_map(v, *keys) if v.is_a? Hash
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def delete_map(map, *keys)
|
78
|
+
keys.each { |k| map.delete(k) }
|
79
|
+
end
|
80
|
+
|
81
|
+
private :delete_map
|
82
|
+
|
83
|
+
def merge!(other)
|
84
|
+
map = other.all
|
85
|
+
merge_map(@all, map)
|
86
|
+
end
|
87
|
+
|
88
|
+
def merge_map(m1, m2)
|
89
|
+
return m2 unless m1
|
90
|
+
|
91
|
+
m2.each do |k, v|
|
92
|
+
if v.is_a? Hash
|
93
|
+
m1[k] ||= {}
|
94
|
+
merge_map(m1[k], v)
|
95
|
+
else
|
96
|
+
m1[k] = v
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
private :merge_map
|
102
|
+
|
103
|
+
def store
|
104
|
+
dirname = File.dirname(@file)
|
105
|
+
Dir.mkdir(dirname) unless File.exist?(dirname)
|
106
|
+
new = !File.exist?(@file)
|
107
|
+
|
108
|
+
File.open(@file, 'w') do |f|
|
109
|
+
f.write @all.to_yaml
|
110
|
+
end
|
111
|
+
if new
|
112
|
+
begin
|
113
|
+
File.chmod(0o100600, @file)
|
114
|
+
rescue StandardError
|
115
|
+
nil
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,248 @@
|
|
1
|
+
require 'command_helper'
|
2
|
+
|
3
|
+
class Gem::Commands::FakeCommand < Gem::AbstractCommand
|
4
|
+
def description
|
5
|
+
'fake command'
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super 'fake', description
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class AbstractCommandTest < CommandTest
|
17
|
+
|
18
|
+
context "with an fake command" do
|
19
|
+
setup do
|
20
|
+
@command = Gem::Commands::FakeCommand.new
|
21
|
+
Gem.configuration.verbose = false
|
22
|
+
stub(@command).say
|
23
|
+
ENV['http_proxy'] = nil
|
24
|
+
ENV['HTTP_PROXY'] = nil
|
25
|
+
end
|
26
|
+
|
27
|
+
context "parsing the proxy" do
|
28
|
+
should "return nil if no proxy is set" do
|
29
|
+
stub_config(:http_proxy => nil)
|
30
|
+
assert_equal nil, @command.http_proxy( nil )
|
31
|
+
end
|
32
|
+
|
33
|
+
should "return nil if the proxy is set to :no_proxy" do
|
34
|
+
stub_config(:http_proxy => :no_proxy)
|
35
|
+
assert_equal nil, @command.http_proxy( 'asd' )
|
36
|
+
end
|
37
|
+
|
38
|
+
should "return a proxy as a URI if set" do
|
39
|
+
stub_config( :http_proxy => 'http://proxy.example.org:9192' )
|
40
|
+
assert_equal 'proxy.example.org', @command.http_proxy( 'http://asd' ).host
|
41
|
+
assert_equal 9192, @command.http_proxy( 'http://asd' ).port
|
42
|
+
end
|
43
|
+
|
44
|
+
should "return a proxy as a URI if set by environment variable" do
|
45
|
+
ENV['http_proxy'] = "http://jack:duck@192.168.1.100:9092"
|
46
|
+
assert_equal "192.168.1.100", @command.http_proxy( 'http://asd' ).host
|
47
|
+
assert_equal 9092, @command.http_proxy( 'http://asd' ).port
|
48
|
+
assert_equal "jack", @command.http_proxy( 'http://asd' ).user
|
49
|
+
assert_equal "duck", @command.http_proxy( 'http://asd' ).password
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
should "sign in if no authorization and no nexus url in config" do
|
54
|
+
config_path = File.join( 'pkg', 'configsomething')
|
55
|
+
FileUtils.rm_f( config_path )
|
56
|
+
@command.options[ :nexus_config ] = config_path
|
57
|
+
stub(@command).sign_in
|
58
|
+
stub(@command).configure_url
|
59
|
+
@command.setup
|
60
|
+
assert_received(@command) { |command| command.configure_url }
|
61
|
+
assert_received(@command) { |command| command.sign_in }
|
62
|
+
end
|
63
|
+
|
64
|
+
should "sign in if --clear-config is set" do
|
65
|
+
config_path = File.join( 'pkg', 'config_clear')
|
66
|
+
FileUtils.rm_f( config_path )
|
67
|
+
@command.options[ :nexus_config ] = config_path
|
68
|
+
stub(@command).sign_in
|
69
|
+
stub(@command).configure_url
|
70
|
+
stub(@command).options do
|
71
|
+
{ :nexus_clear => true,
|
72
|
+
:nexus_config => config_path
|
73
|
+
}
|
74
|
+
end
|
75
|
+
@command.setup
|
76
|
+
assert_received(@command) { |command| command.sign_in }
|
77
|
+
assert_received(@command) { |command| command.configure_url }
|
78
|
+
end
|
79
|
+
|
80
|
+
should "sign in if --password is set" do
|
81
|
+
config_path = File.join( 'pkg', 'config_password')
|
82
|
+
File.open( config_path, 'w') do |f|
|
83
|
+
h = { :url => 'http://example.com' }
|
84
|
+
f.write h.to_yaml
|
85
|
+
end
|
86
|
+
@command.options[ :nexus_config ] = config_path
|
87
|
+
@command.options[ :nexus_prompt ] = true
|
88
|
+
stub(@command).sign_in
|
89
|
+
@command.setup
|
90
|
+
assert_received(@command) { |command| command.sign_in }
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
should "always return stored authorization and url" do
|
95
|
+
config_path = File.join( 'pkg', 'configsomething')
|
96
|
+
FileUtils.rm_f( config_path )
|
97
|
+
@command.options[ :nexus_config ] = config_path
|
98
|
+
@command.options[ :nexus_prompt ] = true
|
99
|
+
@command.config.url = 'something'
|
100
|
+
@command.config.authorization = 'something'
|
101
|
+
assert_not_nil @command.authorization
|
102
|
+
assert_not_nil @command.url
|
103
|
+
end
|
104
|
+
|
105
|
+
should "not sign in nor configure if authorizaton and url exists" do
|
106
|
+
config_path = File.join( 'pkg', 'configsomething')
|
107
|
+
FileUtils.rm_f( config_path )
|
108
|
+
@command.options[ :nexus_config ] = config_path
|
109
|
+
stub(@command).authorization { "1234567890" }
|
110
|
+
stub(@command).url { "abc" }
|
111
|
+
stub(@command).sign_in
|
112
|
+
stub(@command).configure_url
|
113
|
+
@command.setup
|
114
|
+
assert_received(@command) { |command| command.configure_url.never }
|
115
|
+
assert_received(@command) { |command| command.sign_in.never }
|
116
|
+
end
|
117
|
+
|
118
|
+
context "using the proxy" do
|
119
|
+
setup do
|
120
|
+
stub_config( :http_proxy => "http://gilbert:sekret@proxy.example.org:8081" )
|
121
|
+
@proxy_class = Object.new
|
122
|
+
mock(Net::HTTP).Proxy('proxy.example.org', 8081, 'gilbert', 'sekret') { @proxy_class }
|
123
|
+
@command.use_proxy!( 'http://asd' )
|
124
|
+
end
|
125
|
+
|
126
|
+
should "replace Net::HTTP with a proxy version" do
|
127
|
+
assert_equal @proxy_class, @command.proxy_class
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context 'separeted config per repo key' do
|
132
|
+
should 'store the config on per key' do
|
133
|
+
config_path = File.join( 'pkg', 'configrepo')
|
134
|
+
FileUtils.rm_f( config_path )
|
135
|
+
@command.options[ :nexus_config ] = config_path
|
136
|
+
@command.options[ :nexus_repo ] = :first
|
137
|
+
@command.config.url = :thing
|
138
|
+
@command.options[ :nexus_repo ] = :second
|
139
|
+
@command.send :instance_variable_set, '@config'.to_sym, nil
|
140
|
+
@command.config.url = :otherthing
|
141
|
+
@command.options[ :nexus_repo ] = nil
|
142
|
+
@command.send :instance_variable_set, '@config'.to_sym, nil
|
143
|
+
@command.config.url = :nothing
|
144
|
+
assert_equal( Gem.configuration.load_file(config_path),
|
145
|
+
{ :first => {:url => :thing},
|
146
|
+
:second => {:url => :otherthing},
|
147
|
+
:url => :nothing } )
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context "clear username + password" do
|
152
|
+
|
153
|
+
should "clear stored authorization" do
|
154
|
+
stub(@command).options { {:nexus_config => File.join( 'pkg',
|
155
|
+
'config') } }
|
156
|
+
stub(@command).say
|
157
|
+
stub(@command).ask { nil }
|
158
|
+
stub(@command).ask_for_password { nil }
|
159
|
+
@command.config.authorization = 'some authentication'
|
160
|
+
|
161
|
+
@command.sign_in
|
162
|
+
assert_nil @command.authorization
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context "encryption" do
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
context "signing in" do
|
171
|
+
setup do
|
172
|
+
@username = "username"
|
173
|
+
@password = "password 01234567890123456789012345678901234567890123456789"
|
174
|
+
@key = "key"
|
175
|
+
|
176
|
+
stub(@command).say
|
177
|
+
stub(@command).ask { @username }
|
178
|
+
stub(@command).ask_for_password { @password }
|
179
|
+
stub(@command).options { {:nexus_config => File.join( 'pkg',
|
180
|
+
'configsign') } }
|
181
|
+
@command.config.authorization = @key
|
182
|
+
end
|
183
|
+
|
184
|
+
should "ask for username and password" do
|
185
|
+
@command.sign_in
|
186
|
+
assert_received(@command) { |command| command.ask("Username: ") }
|
187
|
+
assert_received(@command) { |command| command.ask_for_password("Password: ") }
|
188
|
+
assert_equal( @command.config.authorization,
|
189
|
+
"Basic dXNlcm5hbWU6cGFzc3dvcmQgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk=" )
|
190
|
+
end
|
191
|
+
|
192
|
+
should "say that we signed in" do
|
193
|
+
@command.sign_in
|
194
|
+
assert_received(@command) { |command| command.say("Enter your Nexus credentials") }
|
195
|
+
assert_received(@command) { |command| command.say("Your Nexus credentials have been stored in pkg/configsign") }
|
196
|
+
assert_equal( @command.config.authorization,
|
197
|
+
"Basic dXNlcm5hbWU6cGFzc3dvcmQgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk=" )
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
context "configure nexus url" do
|
202
|
+
setup do
|
203
|
+
@url = "http://url"
|
204
|
+
|
205
|
+
stub(@command).say
|
206
|
+
stub(@command).ask { @url }
|
207
|
+
stub(@command).options { {:nexus_config => File.join( 'pkg',
|
208
|
+
'configurl') } }
|
209
|
+
@command.config.url = @url
|
210
|
+
end
|
211
|
+
|
212
|
+
should "ask for nexus url" do
|
213
|
+
@command.configure_url
|
214
|
+
assert_received(@command) { |command| command.ask("URL: ") }
|
215
|
+
assert_equal( @command.config.url, "http://url" )
|
216
|
+
end
|
217
|
+
|
218
|
+
should "say that we configured the url" do
|
219
|
+
@command.configure_url
|
220
|
+
assert_received(@command) { |command| command.say("Enter the URL of the rubygems repository on a Nexus server") }
|
221
|
+
assert_received(@command) { |command| command.say("The Nexus URL has been stored in pkg/configurl") }
|
222
|
+
assert_equal( @command.config.url, "http://url" )
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
context "SSL verification" do
|
227
|
+
setup do
|
228
|
+
@url = "https://url"
|
229
|
+
@connection = Net::HTTP.new("host", 443)
|
230
|
+
stub(@connection).request
|
231
|
+
stub(Net::HTTP).new { @connection }
|
232
|
+
@command.config.url = @url
|
233
|
+
end
|
234
|
+
|
235
|
+
should "disable SSL verification" do
|
236
|
+
stub(@command.config).ssl_verify_mode { OpenSSL::SSL::VERIFY_NONE }
|
237
|
+
stub(Gem.configuration).verbose { 0 }
|
238
|
+
@command.make_request(:put, "gems/gem")
|
239
|
+
assert_equal( @connection.verify_mode, OpenSSL::SSL::VERIFY_NONE )
|
240
|
+
end
|
241
|
+
|
242
|
+
should "verify SSL" do
|
243
|
+
@command.make_request(:put, "gems/gem")
|
244
|
+
assert_equal( @connection.verify_mode, OpenSSL::SSL::VERIFY_PEER )
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
data/test/cipher_test.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'shoulda'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'nexus/cipher'
|
5
|
+
|
6
|
+
class ConfigTest < ::MiniTest::Unit::TestCase
|
7
|
+
include ShouldaContextLoadable
|
8
|
+
|
9
|
+
context 'no token' do
|
10
|
+
|
11
|
+
should 'create token' do
|
12
|
+
c = Nexus::Cipher.new( 'behappy' )
|
13
|
+
assert_equal( c.token.nil?, false )
|
14
|
+
assert_equal( c.iv.nil?, true )
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'en/decrypt data' do
|
18
|
+
c = Nexus::Cipher.new( 'behappy' )
|
19
|
+
encrypted = c.encrypt( 'something' )
|
20
|
+
cc = Nexus::Cipher.new( 'behappy', c.token )
|
21
|
+
cc.iv = c.iv
|
22
|
+
plain = cc.decrypt( encrypted )
|
23
|
+
|
24
|
+
assert_equal( plain, 'something' )
|
25
|
+
end
|
26
|
+
|
27
|
+
should 'en/decrypt data using the same cipher' do
|
28
|
+
c = Nexus::Cipher.new( 'behappy' )
|
29
|
+
encrypted = c.encrypt( 'something' )
|
30
|
+
plain = c.decrypt( encrypted )
|
31
|
+
|
32
|
+
assert_equal( plain, 'something' )
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'with token' do
|
38
|
+
|
39
|
+
should 'not create token' do
|
40
|
+
c = Nexus::Cipher.new( 'behappy',
|
41
|
+
"UvChT3jkwD7jXFd8mTWJ087i2Xb3tlGmPWUSYtAiRJM=" )
|
42
|
+
assert_equal( c.token, "UvChT3jkwD7jXFd8mTWJ087i2Xb3tlGmPWUSYtAiRJM=" )
|
43
|
+
assert_equal( c.iv.nil?, true )
|
44
|
+
end
|
45
|
+
|
46
|
+
should 'en/decrypt data' do
|
47
|
+
c = Nexus::Cipher.new( 'behappy',
|
48
|
+
"UvChT3jkwD7jXFd8mTWJ087i2Xb3tlGmPWUSYtAiRJM=" )
|
49
|
+
encrypted = c.encrypt( 'something' )
|
50
|
+
cc = Nexus::Cipher.new( 'behappy',
|
51
|
+
"UvChT3jkwD7jXFd8mTWJ087i2Xb3tlGmPWUSYtAiRJM=" )
|
52
|
+
cc.iv = c.iv
|
53
|
+
plain = cc.decrypt( encrypted )
|
54
|
+
|
55
|
+
assert_equal( plain, 'something' )
|
56
|
+
end
|
57
|
+
|
58
|
+
should 'en/decrypt data using the same cipher' do
|
59
|
+
c = Nexus::Cipher.new( 'behappy',
|
60
|
+
"UvChT3jkwD7jXFd8mTWJ087i2Xb3tlGmPWUSYtAiRJM=" )
|
61
|
+
encrypted = c.encrypt( 'something' )
|
62
|
+
plain = c.decrypt( encrypted )
|
63
|
+
|
64
|
+
assert_equal( plain, 'something' )
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
|
3
|
+
require 'shoulda'
|
4
|
+
|
5
|
+
# for some reasons the refute_predicate is missing when executing
|
6
|
+
# via jruby-1.7.4
|
7
|
+
module ActiveSupport
|
8
|
+
class TestCase < ::MiniTest::Unit::TestCase
|
9
|
+
def refute_predicate
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'active_support'
|
15
|
+
require 'active_support/test_case'
|
16
|
+
require 'webmock'
|
17
|
+
require 'rr'
|
18
|
+
|
19
|
+
begin
|
20
|
+
require 'redgreen'
|
21
|
+
rescue LoadError
|
22
|
+
end
|
23
|
+
|
24
|
+
WebMock.disable_net_connect!
|
25
|
+
|
26
|
+
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
27
|
+
|
28
|
+
require "rubygems_plugin"
|
29
|
+
|
30
|
+
class CommandTest < ActiveSupport::TestCase
|
31
|
+
include WebMock::API
|
32
|
+
include ShouldaContextLoadable
|
33
|
+
|
34
|
+
def teardown
|
35
|
+
WebMock.reset!
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def stub_config(config)
|
40
|
+
file = Gem::ConfigFile.new({})
|
41
|
+
config.each { |key, value| file[key] = value }
|
42
|
+
stub(Gem).configuration { config }
|
43
|
+
end
|
44
|
+
|
45
|
+
def assert_said(command, what)
|
46
|
+
assert_received(command) do |command|
|
47
|
+
command.say(what)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def assert_never_said(command, what)
|
52
|
+
assert_received(command) do |command|
|
53
|
+
command.say(what).never
|
54
|
+
end
|
55
|
+
end
|
data/test/config_test.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'shoulda'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'nexus/config'
|
5
|
+
|
6
|
+
class ConfigTest < ::MiniTest::Unit::TestCase
|
7
|
+
include ShouldaContextLoadable
|
8
|
+
|
9
|
+
context 'storing url and authorization' do
|
10
|
+
|
11
|
+
should 'with plain text file' do
|
12
|
+
file = File.join( 'pkg', 'plainconfig' )
|
13
|
+
FileUtils.rm_f file
|
14
|
+
|
15
|
+
repos = [ nil, 'first', 'second' ]
|
16
|
+
|
17
|
+
repos.each do |repo|
|
18
|
+
c = Nexus::Config.new( file, repo )
|
19
|
+
c.url = "http://example.com/#{repo}"
|
20
|
+
c.authorization = "BASIC asddsa#{repo}"
|
21
|
+
|
22
|
+
assert_equal c.authorization, "BASIC asddsa#{repo}"
|
23
|
+
assert_equal c.url, "http://example.com/#{repo}"
|
24
|
+
end
|
25
|
+
|
26
|
+
repos.each do |repo|
|
27
|
+
c = Nexus::Config.new( file, repo )
|
28
|
+
assert_equal c.authorization, "BASIC asddsa#{repo}"
|
29
|
+
assert_equal c.url, "http://example.com/#{repo}"
|
30
|
+
end
|
31
|
+
|
32
|
+
assert_equal( Nexus::Config.new( file ).repos,
|
33
|
+
{ "first"=>"http://example.com/first",
|
34
|
+
"second"=>"http://example.com/second",
|
35
|
+
"DEFAULT"=>"http://example.com/"} )
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'auxilary functions' do
|
41
|
+
|
42
|
+
should 'encrypt and decrypt credentials' do
|
43
|
+
file = File.join( 'pkg', 'auxconfig' )
|
44
|
+
FileUtils.rm_f file
|
45
|
+
|
46
|
+
[ nil, 'key' ].each do |repo|
|
47
|
+
c = Nexus::Config.new( file, repo )
|
48
|
+
c.authorization = 'BASIC asddsa'
|
49
|
+
|
50
|
+
assert_equal c.authorization, 'BASIC asddsa'
|
51
|
+
|
52
|
+
cc = Nexus::Config.new( file, repo )
|
53
|
+
cc.password = 'be happy'
|
54
|
+
cc.encrypt_credentials
|
55
|
+
|
56
|
+
assert_equal cc.authorization, 'BASIC asddsa'
|
57
|
+
|
58
|
+
ccc = Nexus::Config.new( file, repo )
|
59
|
+
ccc.password = 'be happy'
|
60
|
+
assert_equal ccc.authorization, 'BASIC asddsa'
|
61
|
+
assert_equal ccc.send( :[], :iv ), cc.send( :[], :iv )
|
62
|
+
|
63
|
+
cc.decrypt_credentials
|
64
|
+
|
65
|
+
assert_equal cc.authorization, 'BASIC asddsa'
|
66
|
+
|
67
|
+
ccc = Nexus::Config.new( file, repo )
|
68
|
+
|
69
|
+
assert_equal ccc.authorization , 'BASIC asddsa'
|
70
|
+
assert_equal ccc.send( :[], :iv ), nil
|
71
|
+
assert_equal ccc.send( :[], :token ), nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
should 'move credentials to secrets file' do
|
76
|
+
file = File.join( 'pkg', 'auxcfg' )
|
77
|
+
sfile = File.join( 'pkg', 'auxsrt' )
|
78
|
+
FileUtils.rm_f file
|
79
|
+
FileUtils.rm_f sfile
|
80
|
+
|
81
|
+
repos = [ nil, 'first', 'second' ]
|
82
|
+
|
83
|
+
repos.each do |repo|
|
84
|
+
c = Nexus::Config.new( file, repo )
|
85
|
+
c.url = "http://example.com/#{repo}"
|
86
|
+
c.authorization = "BASIC asddsa#{repo}"
|
87
|
+
end
|
88
|
+
|
89
|
+
Nexus::Config.new( file ).new_secrets( sfile )
|
90
|
+
assert File.exists?( sfile ), true
|
91
|
+
|
92
|
+
repos.each do |repo|
|
93
|
+
c = Nexus::Config.new( sfile, repo )
|
94
|
+
assert_equal c.url, nil
|
95
|
+
assert_equal c.authorization, "BASIC asddsa#{repo}"
|
96
|
+
end
|
97
|
+
|
98
|
+
c = Nexus::ConfigFile.new( file )
|
99
|
+
assert_equal c[ :authorization, nil ], nil
|
100
|
+
assert_equal c[ :secrets, nil ], sfile
|
101
|
+
|
102
|
+
repos.each do |repo|
|
103
|
+
c = Nexus::ConfigFile.new( file )
|
104
|
+
assert_equal c[ :url, repo ], "http://example.com/#{repo}"
|
105
|
+
end
|
106
|
+
|
107
|
+
Nexus::Config.new( file ).new_secrets( nil )
|
108
|
+
assert_equal File.exists?( sfile ), false
|
109
|
+
|
110
|
+
repos.each do |repo|
|
111
|
+
c = Nexus::Config.new( file, repo )
|
112
|
+
assert_equal c.url, "http://example.com/#{repo}"
|
113
|
+
assert_equal c.authorization, "BASIC asddsa#{repo}"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'shoulda'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'nexus/config_file'
|
5
|
+
|
6
|
+
class ConfigTest < ::MiniTest::Unit::TestCase
|
7
|
+
include ShouldaContextLoadable
|
8
|
+
|
9
|
+
context 'file' do
|
10
|
+
|
11
|
+
should 'store key/values' do
|
12
|
+
file = File.join( 'pkg', 'cfg' )
|
13
|
+
FileUtils.rm_f file
|
14
|
+
f = Nexus::ConfigFile.new( file )
|
15
|
+
f[ 'asd_key', nil ] = 'dsa_value'
|
16
|
+
f[ 'asdasd_key', nil ] = 'dsa_value_dsa'
|
17
|
+
f[ 'asd_key', 'first' ] = 'dsa_value_dsa'
|
18
|
+
f[ 'asdasd_key', 'first' ] = 'dsadsa_value'
|
19
|
+
|
20
|
+
assert_equal( f[ 'asd_key', nil ], 'dsa_value' )
|
21
|
+
assert_equal( f[ 'asdasd_key', 'first' ], 'dsadsa_value' )
|
22
|
+
|
23
|
+
f.store
|
24
|
+
|
25
|
+
assert_equal( f.all, Nexus::ConfigFile.new( file ).all )
|
26
|
+
assert_equal( f.repos, [ 'first' ] )
|
27
|
+
|
28
|
+
assert_equal( f.section( 'asd_key' ),
|
29
|
+
{ "asd_key"=>"dsa_value",
|
30
|
+
"first"=>{"asd_key"=>"dsa_value_dsa"} } )
|
31
|
+
end
|
32
|
+
|
33
|
+
should 'delete key/values' do
|
34
|
+
file = File.join( 'pkg', 'cfg' )
|
35
|
+
FileUtils.rm_f file
|
36
|
+
f = Nexus::ConfigFile.new( file )
|
37
|
+
f[ 'asd_key', nil ] = 'dsa_value'
|
38
|
+
f[ 'asdasd_key', nil ] = 'dsa_value_dsa'
|
39
|
+
f[ 'asd_key', 'first' ] = 'dsa_value_dsa'
|
40
|
+
f[ 'asdasd_key', 'first' ] = 'dsadsa_value'
|
41
|
+
|
42
|
+
assert_equal( f[ 'asd_key', nil ], 'dsa_value' )
|
43
|
+
assert_equal( f[ 'asdasd_key', 'first' ], 'dsadsa_value' )
|
44
|
+
|
45
|
+
f.delete( 'asd_key' )
|
46
|
+
|
47
|
+
assert_equal( f[ 'asd_key', nil ], nil )
|
48
|
+
assert_equal( f[ 'asd_key', 'first' ], nil )
|
49
|
+
assert_equal( f[ 'asdasd_key', nil ], 'dsa_value_dsa' )
|
50
|
+
assert_equal( f[ 'asdasd_key', 'first' ], 'dsadsa_value' )
|
51
|
+
end
|
52
|
+
|
53
|
+
should 'merge other file' do
|
54
|
+
file1 = File.join( 'pkg', 'cfg1' )
|
55
|
+
file2 = File.join( 'pkg', 'cfg2' )
|
56
|
+
FileUtils.rm_f file1
|
57
|
+
FileUtils.rm_f file2
|
58
|
+
f1 = Nexus::ConfigFile.new( file1 )
|
59
|
+
f2 = Nexus::ConfigFile.new( file2 )
|
60
|
+
|
61
|
+
assert_equal( f1.all, {} )
|
62
|
+
|
63
|
+
f2[ 'asd_key', nil ] = 'dsa_value'
|
64
|
+
f2[ 'asdasd_key', 'first' ] = 'dsadsa_value'
|
65
|
+
|
66
|
+
f1.merge!( f2 )
|
67
|
+
|
68
|
+
assert_equal( f1[ 'asd_key', nil ], 'dsa_value' )
|
69
|
+
assert_equal( f1[ 'asdasd_key', 'first' ], 'dsadsa_value' )
|
70
|
+
|
71
|
+
f1.store
|
72
|
+
f2.store
|
73
|
+
|
74
|
+
assert_equal( Nexus::ConfigFile.new( file1 ).all,
|
75
|
+
Nexus::ConfigFile.new( file2 ).all )
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|