sambal 0.0.2 → 0.0.3
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.
- data/lib/sambal/version.rb +1 -1
- data/lib/sambal.rb +52 -19
- data/spec/sambal/client_spec.rb +22 -12
- data/spec/spec_helper.rb +6 -0
- metadata +4 -4
data/lib/sambal/version.rb
CHANGED
data/lib/sambal.rb
CHANGED
@@ -11,6 +11,33 @@ require 'tempfile'
|
|
11
11
|
|
12
12
|
module Sambal
|
13
13
|
|
14
|
+
class InternalError < RuntimeError; end
|
15
|
+
|
16
|
+
class Response
|
17
|
+
|
18
|
+
attr_reader :message
|
19
|
+
|
20
|
+
def initialize(message, success)
|
21
|
+
msg = message.split("\n")
|
22
|
+
msg.each do |line|
|
23
|
+
if line =~ /^NT\_.*\s/
|
24
|
+
@message = line
|
25
|
+
end
|
26
|
+
end
|
27
|
+
@message ||= message
|
28
|
+
@success = success
|
29
|
+
end
|
30
|
+
|
31
|
+
def success?
|
32
|
+
@success
|
33
|
+
end
|
34
|
+
|
35
|
+
def failure?
|
36
|
+
!success?
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
14
41
|
class Client
|
15
42
|
|
16
43
|
attr_reader :connected
|
@@ -49,29 +76,33 @@ module Sambal
|
|
49
76
|
end
|
50
77
|
|
51
78
|
def cd(dir)
|
52
|
-
if ask
|
53
|
-
|
79
|
+
if response = ask("cd #{dir}")
|
80
|
+
Response.new(response, true)
|
54
81
|
else
|
55
|
-
|
82
|
+
Response.new(response, false)
|
56
83
|
end
|
57
84
|
end
|
58
85
|
|
59
86
|
def get(file, output)
|
60
87
|
response = ask "get #{file} #{output}"
|
61
88
|
if response =~ /^getting\sfile.*$/
|
62
|
-
true
|
89
|
+
Response.new(response, true)
|
63
90
|
else
|
64
|
-
false
|
91
|
+
Response.new(response, false)
|
65
92
|
end
|
93
|
+
rescue InternalError => e
|
94
|
+
Response.new(e.message, false)
|
66
95
|
end
|
67
96
|
|
68
97
|
def put(file, destination)
|
69
98
|
response = ask "put #{file} #{destination}"
|
70
99
|
if response =~ /^putting\sfile.*$/
|
71
|
-
true
|
100
|
+
Response.new(response, true)
|
72
101
|
else
|
73
|
-
false
|
102
|
+
Response.new(response, false)
|
74
103
|
end
|
104
|
+
rescue InternalError => e
|
105
|
+
Response.new(e.message, false)
|
75
106
|
end
|
76
107
|
|
77
108
|
def put_content(content, destination)
|
@@ -81,10 +112,12 @@ module Sambal
|
|
81
112
|
end
|
82
113
|
response = ask "put #{t.path} #{destination}"
|
83
114
|
if response =~ /^putting\sfile.*$/
|
84
|
-
true
|
115
|
+
Response.new(response, true)
|
85
116
|
else
|
86
|
-
false
|
117
|
+
Response.new(response, false)
|
87
118
|
end
|
119
|
+
rescue InternalError => e
|
120
|
+
Response.new(e.message, false)
|
88
121
|
ensure
|
89
122
|
t.close
|
90
123
|
end
|
@@ -93,14 +126,16 @@ module Sambal
|
|
93
126
|
response = ask "del #{file}"
|
94
127
|
next_line = response.split("\n")[1]
|
95
128
|
if next_line =~ /^smb:.*\\>/
|
96
|
-
true
|
97
|
-
elsif next_line =~ /^NT_STATUS_NO_SUCH_FILE.*$/
|
98
|
-
|
99
|
-
elsif next_line =~ /^NT_STATUS_ACCESS_DENIED.*$/
|
100
|
-
|
129
|
+
Response.new(response, true)
|
130
|
+
#elsif next_line =~ /^NT_STATUS_NO_SUCH_FILE.*$/
|
131
|
+
# Response.new(response, false)
|
132
|
+
#elsif next_line =~ /^NT_STATUS_ACCESS_DENIED.*$/
|
133
|
+
# Response.new(response, false)
|
101
134
|
else
|
102
|
-
false
|
135
|
+
Response.new(response, false)
|
103
136
|
end
|
137
|
+
rescue InternalError => e
|
138
|
+
Response.new(e.message, false)
|
104
139
|
end
|
105
140
|
|
106
141
|
def close
|
@@ -108,16 +143,14 @@ module Sambal
|
|
108
143
|
@connected = false
|
109
144
|
end
|
110
145
|
|
111
|
-
private
|
112
|
-
|
113
146
|
def ask(cmd)
|
114
147
|
@i.printf("#{cmd}\n")
|
115
148
|
response = @o.expect(/^smb:.*\\>/,10)[0] rescue nil
|
116
149
|
if response.nil?
|
117
150
|
$stderr.puts "Failed to do #{cmd}"
|
118
|
-
|
151
|
+
raise Exception.new, "Failed to do #{cmd}"
|
119
152
|
else
|
120
|
-
|
153
|
+
response
|
121
154
|
end
|
122
155
|
end
|
123
156
|
|
data/spec/sambal/client_spec.rb
CHANGED
@@ -64,48 +64,58 @@ describe Sambal::Client do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should get files from an smb server" do
|
67
|
-
@sambal_client.get(testfile, "/tmp/sambal_spec_testfile.txt").should
|
67
|
+
@sambal_client.get(testfile, "/tmp/sambal_spec_testfile.txt").should be_successful
|
68
68
|
File.exists?("/tmp/sambal_spec_testfile.txt").should == true
|
69
69
|
File.size("/tmp/sambal_spec_testfile.txt").should == @sambal_client.ls[testfile][:size].to_i
|
70
70
|
end
|
71
71
|
|
72
|
-
it "should
|
73
|
-
@sambal_client.get("non_existant_file.txt", "/tmp/sambal_spec_non_existant_file.txt")
|
72
|
+
it "should not be successful when getting a file from an smb server fails" do
|
73
|
+
result = @sambal_client.get("non_existant_file.txt", "/tmp/sambal_spec_non_existant_file.txt")
|
74
|
+
result.should_not be_successful
|
75
|
+
result.message.should match /^NT_.*$/
|
76
|
+
result.message.split("\n").should have(1).line
|
74
77
|
File.exists?("/tmp/sambal_spec_non_existant_file.txt").should == false
|
75
78
|
end
|
76
79
|
|
77
80
|
it "should upload files to an smb server" do
|
78
81
|
@sambal_client.ls.should_not have_key("uploaded_file.txt")
|
79
|
-
@sambal_client.put(file_to_upload.path, 'uploaded_file.txt')
|
82
|
+
@sambal_client.put(file_to_upload.path, 'uploaded_file.txt').should be_successful
|
80
83
|
@sambal_client.ls.should have_key("uploaded_file.txt")
|
81
84
|
end
|
82
85
|
|
83
86
|
it "should upload content to an smb server" do
|
84
87
|
@sambal_client.ls.should_not have_key("content_uploaded_file.txt")
|
85
|
-
@sambal_client.put_content("Content upload", 'content_uploaded_file.txt')
|
88
|
+
@sambal_client.put_content("Content upload", 'content_uploaded_file.txt').should be_successful
|
86
89
|
@sambal_client.ls.should have_key("content_uploaded_file.txt")
|
87
90
|
end
|
88
91
|
|
89
92
|
it "should delete files on an smb server" do
|
90
|
-
@sambal_client.del(testfile).should
|
93
|
+
@sambal_client.del(testfile).should be_successful
|
91
94
|
@sambal_client.ls.should_not have_key(testfile)
|
92
95
|
end
|
93
96
|
|
94
|
-
it "should
|
95
|
-
@sambal_client.del("non_existant_file.txt")
|
97
|
+
it "should not be successful when deleting a file from an smb server fails" do
|
98
|
+
result = @sambal_client.del("non_existant_file.txt")
|
99
|
+
result.should_not be_successful
|
100
|
+
result.message.should match /^NT_.*$/
|
101
|
+
result.message.split("\n").should have(1).line
|
96
102
|
end
|
97
103
|
|
98
104
|
it "should switch directory on an smb server" do
|
99
|
-
@sambal_client.put_content("testing directories", 'dirtest.txt') ## a bit stupid, but now we can check that this isn't listed when we switch dirs
|
105
|
+
@sambal_client.put_content("testing directories", 'dirtest.txt').should be_successful ## a bit stupid, but now we can check that this isn't listed when we switch dirs
|
100
106
|
@sambal_client.ls.should have_key('dirtest.txt')
|
101
|
-
@sambal_client.cd(test_directory)
|
107
|
+
@sambal_client.cd(test_directory).should be_successful
|
102
108
|
@sambal_client.ls.should_not have_key('dirtest.txt')
|
103
|
-
@sambal_client.put_content("in #{test_directory}", 'intestdir.txt')
|
109
|
+
@sambal_client.put_content("in #{test_directory}", 'intestdir.txt').should be_successful
|
104
110
|
@sambal_client.ls.should have_key('intestdir.txt')
|
105
|
-
@sambal_client.cd('..')
|
111
|
+
@sambal_client.cd('..').should be_successful
|
106
112
|
@sambal_client.ls.should_not have_key('intestdir.txt')
|
107
113
|
@sambal_client.ls.should have_key('dirtest.txt')
|
108
114
|
end
|
109
115
|
|
116
|
+
it "should not be successful when command fails" do
|
117
|
+
result = @sambal_client.put("jhfahsf iasifasifh", "jsfijsf ijidjag")
|
118
|
+
result.should_not be_successful
|
119
|
+
end
|
110
120
|
|
111
121
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -44,6 +44,12 @@ File.open(SAMBA_CONF, 'w') do |f|
|
|
44
44
|
f << Document.new(IO.binread("#{spec_path}/smb.conf.erb")).interpolate(samba_share: SAMBA_SHARE, local_user: ENV['USER'])
|
45
45
|
end
|
46
46
|
|
47
|
+
RSpec::Matchers.define :be_successful do
|
48
|
+
match do |actual|
|
49
|
+
actual.success?.should be_true
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
47
53
|
#
|
48
54
|
#
|
49
55
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sambal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70152943099320 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 2.6.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70152943099320
|
25
25
|
description: Ruby Samba Client using the cmdline smbclient
|
26
26
|
email:
|
27
27
|
- john@insane.se
|