dbi-dbrc 1.2.0 → 1.6.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.
@@ -0,0 +1,247 @@
1
+ #########################################################################
2
+ # dbi_dbrc_spec.rb
3
+ #
4
+ # Specs for the base class of DBI::DBRC. This test case should be
5
+ # run via the 'rake spec' task.
6
+ #########################################################################
7
+ require 'dbi/dbrc'
8
+ require 'fileutils'
9
+ require 'spec_helper'
10
+ require 'pp' # Requiring this ahead of fakefs to address a superclass issue.
11
+ require 'fakefs/spec_helpers'
12
+
13
+ RSpec.describe DBI::DBRC do
14
+ include FakeFS::SpecHelpers
15
+
16
+ let(:windows) { File::ALT_SEPARATOR }
17
+ let(:home) { File.join(Dir.pwd, 'home', 'someone') }
18
+ let(:dbrc) { File.join(home, '.dbrc') }
19
+
20
+ let(:plain) {
21
+ %q{
22
+ foo user1 pwd1 Oracle 40 3 60
23
+ foo user2 pwd2 OCI8 60 4 60
24
+ bar user1 pwd3 Oracle 30 2 30
25
+ baz user3 pwd4
26
+ }.lstrip
27
+ }
28
+
29
+ let(:db_foo){ 'foo' }
30
+ let(:db_bar){ 'bar' }
31
+ let(:db_baz){ 'baz' }
32
+ let(:user1) { 'user1' }
33
+ let(:user2) { 'user2' }
34
+
35
+ before do
36
+ allow(Dir).to receive(:home).and_return(home)
37
+ FileUtils.mkdir_p(home)
38
+ File.open(dbrc, 'w'){ |fh| fh.write(plain) }
39
+ File.chmod(0600, dbrc)
40
+
41
+ # FakeFS doesn't implement this yet
42
+ allow_any_instance_of(FakeFS::File::Stat).to receive(:owned?).and_return(true)
43
+ end
44
+
45
+ example "version" do
46
+ expect(described_class::VERSION).to eq('1.6.0')
47
+ expect(described_class::VERSION).to be_frozen
48
+ end
49
+
50
+ context "windows", :windows => true do
51
+ example "constructor raises an error unless the .dbrc file is hidden" do
52
+ allow(FakeFS::File).to receive(:hidden?).and_return(false)
53
+ expect{ described_class.new(db_foo, user1) }.to raise_error(described_class::Error)
54
+ end
55
+ end
56
+
57
+ context "constructor" do
58
+ before do
59
+ if File::ALT_SEPARATOR
60
+ allow(FakeFS::File).to receive(:hidden?).and_return(true)
61
+ allow(FakeFS::File).to receive(:encrypted?).and_return(false)
62
+ end
63
+ end
64
+
65
+ example "constructor raises an error if the permissions are invalid", :unix => true do
66
+ File.chmod(0555, dbrc)
67
+ expect{ described_class.new(db_foo, user1) }.to raise_error(described_class::Error)
68
+ end
69
+
70
+ example "constructor raises an error if no database is provided" do
71
+ expect{ described_class.new }.to raise_error(ArgumentError)
72
+ end
73
+
74
+ example "constructor works as expected with or without user" do
75
+ expect{ described_class.new(db_foo, user1) }.not_to raise_error
76
+ expect{ described_class.new(db_foo, nil) }.not_to raise_error
77
+ end
78
+
79
+ example "constructor fails if the database entry doesn't exist" do
80
+ expect{ described_class.new('bogus', user1) }.to raise_error(DBI::DBRC::Error)
81
+ end
82
+
83
+ example "constructor fails if the user entry doesn't exist" do
84
+ expect{ described_class.new(db_foo, 'nobody') }.to raise_error(DBI::DBRC::Error)
85
+ end
86
+
87
+ example "constructor fails if the .dbrc file isn't found in the specified directory" do
88
+ expect{ described_class.new(db_foo, user1, '/bogusXX') }.to raise_error(DBI::DBRC::Error)
89
+ end
90
+
91
+ example "constructor returns expected values for the same database with different users" do
92
+ dbrc1 = described_class.new(db_foo, user1)
93
+ dbrc2 = described_class.new(db_foo, user2)
94
+ expect(dbrc1.database).to eq(dbrc2.database)
95
+ expect(dbrc1.user).to eq('user1')
96
+ expect(dbrc2.user).to eq('user2')
97
+ end
98
+
99
+ example "constructor returns expected values for the same user with different database" do
100
+ dbrc1 = described_class.new(db_foo, user1)
101
+ dbrc2 = described_class.new(db_bar, user1)
102
+ expect(dbrc1.user).to eq(dbrc2.user)
103
+ expect(dbrc1.database).to eq('foo')
104
+ expect(dbrc2.database).to eq('bar')
105
+ end
106
+
107
+ example "constructor works as expected if some optional fields are not defined" do
108
+ dbrc = described_class.new(db_baz)
109
+ expect(dbrc.user).to eq("user3")
110
+ expect(dbrc.passwd).to eq("pwd4")
111
+ expect(dbrc.driver).to be_nil
112
+ expect(dbrc.interval).to be_nil
113
+ expect(dbrc.timeout).to be_nil
114
+ expect(dbrc.max_reconn).to be_nil
115
+ expect(dbrc.dsn).to be_nil
116
+ end
117
+ end
118
+
119
+ context "instance methods" do
120
+ before do
121
+ if File::ALT_SEPARATOR
122
+ allow(FakeFS::File).to receive(:hidden?).and_return(true)
123
+ allow(FakeFS::File).to receive(:encrypted?).and_return(false)
124
+ end
125
+ @dbrc = DBI::DBRC.new(db_foo)
126
+ end
127
+
128
+ example "basic database getter method and aliases" do
129
+ expect(@dbrc).to respond_to(:database)
130
+ expect(@dbrc.method(:database)).to eq(@dbrc.method(:db))
131
+ expect(@dbrc.method(:database)).to eq(@dbrc.method(:host))
132
+ end
133
+
134
+ example "basic database setter method and alias" do
135
+ expect(@dbrc).to respond_to(:database=)
136
+ expect(@dbrc.method(:database=)).to eq(@dbrc.method(:db=))
137
+ end
138
+
139
+ example "database method returns expected value" do
140
+ expect(@dbrc.database).to eq('foo')
141
+ end
142
+
143
+ example "basic dbrc_dir check" do
144
+ expect(@dbrc).to respond_to(:dbrc_dir)
145
+ end
146
+
147
+ example "dbrc_dir returns the expected value" do
148
+ expect(@dbrc.dbrc_dir).to eq(home)
149
+ end
150
+
151
+ example "basic dbrc_file check" do
152
+ expect(@dbrc).to respond_to(:dbrc_file)
153
+ end
154
+
155
+ example "dbrc_file returns the expected value" do
156
+ expect(File.basename(@dbrc.dbrc_file)).to eq('.dbrc')
157
+ end
158
+
159
+ example "basic dsn getter check" do
160
+ expect(@dbrc).to respond_to(:dsn)
161
+ end
162
+
163
+ example "dsn method returns the expected value" do
164
+ expect(@dbrc.dsn).to eq('dbi:Oracle:foo')
165
+ end
166
+
167
+ example "basic dsn setter check" do
168
+ expect(@dbrc).to respond_to(:dsn=)
169
+ end
170
+
171
+ example "user getter basic check" do
172
+ expect(@dbrc).to respond_to(:user)
173
+ end
174
+
175
+ example "user method returns expected value" do
176
+ expect(@dbrc.user).to eq('user1')
177
+ end
178
+
179
+ example "user setter basic check" do
180
+ expect(@dbrc).to respond_to(:user=)
181
+ end
182
+
183
+ example "password getter basic check and alias" do
184
+ expect(@dbrc).to respond_to(:password)
185
+ expect(@dbrc.method(:password)).to eq(@dbrc.method(:passwd))
186
+ end
187
+
188
+ example "password method returns expected value" do
189
+ expect(@dbrc.password).to eq("pwd1")
190
+ end
191
+
192
+ example "password setter basic check and alias" do
193
+ expect(@dbrc).to respond_to(:password=)
194
+ expect(@dbrc.method(:password=)).to eq(@dbrc.method(:passwd=))
195
+ end
196
+
197
+ example "driver getter basic check" do
198
+ expect(@dbrc).to respond_to(:driver)
199
+ end
200
+
201
+ example "driver method returns expected value" do
202
+ expect(@dbrc.driver).to eq("Oracle")
203
+ end
204
+
205
+ example "driver setter basic check" do
206
+ expect(@dbrc).to respond_to(:driver=)
207
+ end
208
+
209
+ example "interval getter basic check" do
210
+ expect(@dbrc).to respond_to(:interval)
211
+ end
212
+
213
+ example "interval method returns expected value" do
214
+ expect(@dbrc.interval).to eq(60)
215
+ end
216
+
217
+ example "interval setter basic check" do
218
+ expect(@dbrc).to respond_to(:interval=)
219
+ end
220
+
221
+ example "timeout getter basic check" do
222
+ expect(@dbrc).to respond_to(:timeout)
223
+ expect(@dbrc.method(:timeout)).to eq(@dbrc.method(:time_out))
224
+ end
225
+
226
+ example "timeout method returns expected value" do
227
+ expect(@dbrc.timeout).to eq(40)
228
+ end
229
+
230
+ example "timeout setter basic check" do
231
+ expect(@dbrc).to respond_to(:timeout=)
232
+ end
233
+
234
+ example "max_reconn getter basic check" do
235
+ expect(@dbrc).to respond_to(:max_reconn)
236
+ expect(@dbrc.method(:max_reconn)).to eq(@dbrc.method(:maximum_reconnects))
237
+ end
238
+
239
+ example "max_reconn method returns expected value" do
240
+ expect(@dbrc.max_reconn).to eq(3)
241
+ end
242
+
243
+ example "max_reconn setter basic check" do
244
+ expect(@dbrc).to respond_to(:max_reconn=)
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,101 @@
1
+ ########################################################################
2
+ # dbi_dbrc_xml_spec.rb
3
+ #
4
+ # Test suite for the XML specific version of DBI::DBRC. This test case
5
+ # should be run via the 'rake test' task.
6
+ ########################################################################
7
+ require 'dbi/dbrc'
8
+ require 'rspec'
9
+ require 'pp' # Need this to avoid fakefs error
10
+ require 'fakefs/spec_helpers'
11
+
12
+ RSpec.describe DBI::DBRC::XML, :xml => true do
13
+ include FakeFS::SpecHelpers
14
+
15
+ let(:home) { File.join(Dir.pwd, 'home', 'someone') }
16
+ let(:dbrc) { File.join(home, '.dbrc') }
17
+
18
+ let(:db_foo){ 'foo' }
19
+ let(:user1) { 'user1' }
20
+
21
+ let(:xml){
22
+ %q{
23
+ <dbrc>
24
+ <database name="foo">
25
+ <user>user1</user>
26
+ <password>pwd1</password>
27
+ <driver>Oracle</driver>
28
+ <interval>60</interval>
29
+ <timeout>40</timeout>
30
+ <maximum_reconnects>3</maximum_reconnects>
31
+ </database>
32
+ <database name="foo">
33
+ <user>user2</user>
34
+ <password>pwd2</password>
35
+ <driver>OCI8</driver>
36
+ <interval>60</interval>
37
+ <timeout>60</timeout>
38
+ <maximum_reconnects>4</maximum_reconnects>
39
+ </database>
40
+ <database name="bar">
41
+ <user>user1</user>
42
+ <password>pwd3</password>
43
+ <driver>Oracle</driver>
44
+ <interval>30</interval>
45
+ <timeout>30</timeout>
46
+ <maximum_reconnects>2</maximum_reconnects>
47
+ </database>
48
+ <database name="baz">
49
+ <user>user3</user>
50
+ <password>pwd4</password>
51
+ </database>
52
+ </dbrc>
53
+ }.lstrip
54
+ }
55
+
56
+ before do
57
+ allow(Dir).to receive(:home).and_return(home)
58
+
59
+ if File::ALT_SEPARATOR
60
+ allow(FakeFS::File).to receive(:hidden?).and_return(true)
61
+ allow(FakeFS::File).to receive(:encrypted?).and_return(false)
62
+ end
63
+
64
+ FileUtils.mkdir_p(home)
65
+ File.open(dbrc, 'w'){ |fh| fh.write(xml) }
66
+ File.chmod(0600, dbrc)
67
+
68
+ # FakeFS doesn't implement this yet
69
+ allow_any_instance_of(FakeFS::File::Stat).to receive(:owned?).and_return(true)
70
+ end
71
+
72
+ context "instance methods" do
73
+ before do
74
+ @dbrc = described_class.new(db_foo, user1)
75
+ end
76
+
77
+ example "database method returns expected value" do
78
+ expect(@dbrc.database).to eq('foo')
79
+ end
80
+
81
+ example "password method returns expected value" do
82
+ expect(@dbrc.password).to eq('pwd1')
83
+ end
84
+
85
+ example "driver method returns expected value" do
86
+ expect(@dbrc.driver).to eq('Oracle')
87
+ end
88
+
89
+ example "interval method returns expected value" do
90
+ expect(@dbrc.interval).to eq(60)
91
+ end
92
+
93
+ example "timeout method returns expected value" do
94
+ expect(@dbrc.timeout).to eq(40)
95
+ end
96
+
97
+ example "maximum_reconnects method returns expected value" do
98
+ expect(@dbrc.maximum_reconnects).to eq(3)
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,95 @@
1
+ ########################################################################
2
+ # dbi_dbrc_yml_spec.rb
3
+ #
4
+ # Test suite for the YAML specific version of DBI::DBRC. This test case
5
+ # should be run via the 'rake test' task.
6
+ ########################################################################
7
+ require 'dbi/dbrc'
8
+ require 'rspec'
9
+ require 'pp' # Need this to avoid fakefs error
10
+ require 'fakefs/spec_helpers'
11
+
12
+ RSpec.describe DBI::DBRC::YML, :yml => true do
13
+ include FakeFS::SpecHelpers
14
+
15
+ let(:home) { File.join(Dir.pwd, 'home', 'someone') }
16
+ let(:dbrc) { File.join(home, '.dbrc') }
17
+
18
+ let(:db_foo){ 'foo' }
19
+ let(:user1) { 'user1' }
20
+
21
+ let(:yml){
22
+ %q{
23
+ - foo:
24
+ user: user1
25
+ password: pwd1
26
+ driver: Oracle
27
+ interval: 60
28
+ timeout: 40
29
+ maximum_reconnects: 3
30
+ - foo:
31
+ user: user2
32
+ password: pwd2
33
+ driver: OCI8
34
+ interval: 60
35
+ timeout: 60
36
+ maximum_reconnects: 4
37
+ - bar:
38
+ user: user1
39
+ password: pwd3
40
+ driver: Oracle
41
+ interval: 30
42
+ timeout: 30
43
+ maximum_reconnects: 2
44
+ - baz:
45
+ user: user3
46
+ password: pwd4
47
+ }
48
+ }
49
+
50
+ before do
51
+ allow(Dir).to receive(:home).and_return(home)
52
+
53
+ if File::ALT_SEPARATOR
54
+ allow(FakeFS::File).to receive(:hidden?).and_return(true)
55
+ allow(FakeFS::File).to receive(:encrypted?).and_return(false)
56
+ end
57
+
58
+ FileUtils.mkdir_p(home)
59
+ File.open(dbrc, 'w'){ |fh| fh.write(yml) }
60
+ File.chmod(0600, dbrc)
61
+
62
+ # FakeFS doesn't implement this yet
63
+ allow_any_instance_of(FakeFS::File::Stat).to receive(:owned?).and_return(true)
64
+ end
65
+
66
+ context "instance methods" do
67
+ before do
68
+ @dbrc = described_class.new(db_foo, user1)
69
+ end
70
+
71
+ example "database method returns expected value" do
72
+ expect(@dbrc.database).to eq('foo')
73
+ end
74
+
75
+ example "password method returns expected value" do
76
+ expect(@dbrc.password).to eq('pwd1')
77
+ end
78
+
79
+ example "driver method returns expected value" do
80
+ expect(@dbrc.driver).to eq('Oracle')
81
+ end
82
+
83
+ example "interval method returns expected value" do
84
+ expect(@dbrc.interval).to eq(60)
85
+ end
86
+
87
+ example "timeout method returns expected value" do
88
+ expect(@dbrc.timeout).to eq(40)
89
+ end
90
+
91
+ example "maximum_reconnects method returns expected value" do
92
+ expect(@dbrc.maximum_reconnects).to eq(3)
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,6 @@
1
+ require 'rspec'
2
+
3
+ RSpec.configure do |config|
4
+ config.filter_run_excluding(:windows) if RbConfig::CONFIG['host_os'] !~ /mswin|win32|dos|mingw|cygwin/i
5
+ config.filter_run_excluding(:unix) if RbConfig::CONFIG['host_os'] =~ /mswin|win32|dos|mingw|cygwin/i
6
+ end