canals 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,203 @@
1
+ require 'spec_helper'
2
+ require 'canals/options'
3
+ require 'psych'
4
+
5
+ describe Canals::CanalOptions do
6
+
7
+ let(:name) { "example" }
8
+ let(:remote_host) { "www.example.com" }
9
+ let(:remote_port) { 1234 }
10
+ let(:local_port) { 4321 }
11
+ let(:bind_address) { "1.2.3.4" }
12
+ let(:hostname) { "nat.example.com" }
13
+ let(:user) { "user" }
14
+ let(:pem) { "/tmp/file.pem" }
15
+
16
+ describe "name" do
17
+ it "contains 'name'" do
18
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port}
19
+ opt = Canals::CanalOptions.new(args)
20
+ expect(opt.name).to eq name
21
+ end
22
+
23
+ it "raises error when 'name' is not availble" do
24
+ args = {"remote_host" => remote_host, "remote_port" => remote_port}
25
+ expect{Canals::CanalOptions.new(args)}.to raise_error(Canals::CanalOptionError)
26
+ end
27
+ end
28
+
29
+ describe "remote_host" do
30
+ it "contains 'remote_host'" do
31
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port}
32
+ opt = Canals::CanalOptions.new(args)
33
+ expect(opt.remote_host).to eq remote_host
34
+ end
35
+
36
+ it "raises error when 'remote_host' is not availble" do
37
+ args = {"name" => name, "remote_port" => remote_port}
38
+ expect{Canals::CanalOptions.new(args)}.to raise_error(Canals::CanalOptionError)
39
+ end
40
+ end
41
+
42
+ describe "remote_port" do
43
+ it "contains 'remote_port'" do
44
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port}
45
+ opt = Canals::CanalOptions.new(args)
46
+ expect(opt.remote_port).to eq remote_port
47
+ end
48
+
49
+ it "raises error when 'remote_port' is not availble" do
50
+ args = {"name" => name, "remote_host" => remote_host}
51
+ expect{Canals::CanalOptions.new(args)}.to raise_error(Canals::CanalOptionError)
52
+ end
53
+
54
+ it "transforms remote_port to int if given in string" do
55
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => '1234'}
56
+ opt = Canals::CanalOptions.new(args)
57
+ expect(opt.remote_port).to eq 1234
58
+ expect(opt.local_port).to eq 1234
59
+ end
60
+
61
+ end
62
+
63
+ describe "local_port" do
64
+ it "returns 'local_port' if 'local_port' is availble" do
65
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "local_port" => local_port}
66
+ opt = Canals::CanalOptions.new(args)
67
+ expect(opt.local_port).to eq local_port
68
+ end
69
+
70
+ it "returns 'remote_port' for 'local_port' if 'local_port' isn't given" do
71
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port}
72
+ opt = Canals::CanalOptions.new(args)
73
+ expect(opt.local_port).to eq remote_port
74
+ end
75
+
76
+ it "transforms local_port to int if given in string" do
77
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "local_port" => "4321"}
78
+ opt = Canals::CanalOptions.new(args)
79
+ expect(opt.local_port).to eq 4321
80
+ end
81
+ end
82
+
83
+ describe "bind_address" do
84
+ it "returns 'bind_address' if 'bind_address' is availble" do
85
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "local_port" => local_port, "bind_address" => bind_address}
86
+ opt = Canals::CanalOptions.new(args)
87
+ expect(opt.bind_address).to eq bind_address
88
+ end
89
+
90
+ it "returns 'Canals::CanalOptions::BIND_ADDRESS' for 'bind_address' if 'bind_address' isn't given" do
91
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "local_port" => local_port}
92
+ opt = Canals::CanalOptions.new(args)
93
+ expect(opt.bind_address).to eq Canals::CanalOptions::BIND_ADDRESS
94
+ end
95
+ end
96
+
97
+ describe "environment variables" do
98
+ context "without env" do
99
+
100
+ before(:each) do
101
+ expect(Canals.repository).to receive(:environment).and_return(nil)
102
+ end
103
+
104
+ it "returns 'hostname/user/pem' if availble" do
105
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "hostname" => hostname, "user" => user, "pem" => pem}
106
+ opt = Canals::CanalOptions.new(args)
107
+ expect(opt.hostname).to eq hostname
108
+ expect(opt.user).to eq user
109
+ expect(opt.pem).to eq pem
110
+ end
111
+
112
+ it "returns nil under env_name" do
113
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port}
114
+ opt = Canals::CanalOptions.new(args)
115
+ expect(opt.env_name).to be nil
116
+ end
117
+
118
+ it "constructs proxy value" do
119
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "hostname" => hostname, "user" => user, "pem" => pem}
120
+ opt = Canals::CanalOptions.new(args)
121
+ expect(opt.proxy).to eq "-i #{pem} #{user}@#{hostname}"
122
+ end
123
+
124
+ it "constructs proxy value, no pem" do
125
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "hostname" => hostname, "user" => user}
126
+ opt = Canals::CanalOptions.new(args)
127
+ expect(opt.proxy).to eq "#{user}@#{hostname}"
128
+ end
129
+ end
130
+
131
+ context "with env" do
132
+ let(:env_name) { "env" }
133
+
134
+ before(:each) do
135
+ env = double("environment")
136
+
137
+ expect(Canals.repository).to receive(:environment).with(env_name).and_return(env)
138
+ allow(env).to receive(:hostname).and_return(hostname)
139
+ allow(env).to receive(:user).and_return(user)
140
+ allow(env).to receive(:pem).and_return(pem)
141
+ end
142
+
143
+ it "returns 'hostname/user/pem' from env" do
144
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "env" => env_name}
145
+ opt = Canals::CanalOptions.new(args)
146
+ expect(opt.hostname).to eq hostname
147
+ expect(opt.user).to eq user
148
+ expect(opt.pem).to eq pem
149
+ end
150
+
151
+ it "returns environment name under env_name" do
152
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "env" => env_name}
153
+ opt = Canals::CanalOptions.new(args)
154
+ expect(opt.env_name).to eq env_name
155
+ end
156
+
157
+ it "constructs proxy value" do
158
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "env" => env_name}
159
+ opt = Canals::CanalOptions.new(args)
160
+ expect(opt.proxy).to eq "-i #{pem} #{user}@#{hostname}"
161
+ end
162
+
163
+ it "returns allows overshadowing of env" do
164
+ overshadow_hostname = "*hostname*"
165
+ overshadow_user = "*user*"
166
+ overshadow_pem = "/tmp/overshadow.pem"
167
+
168
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "env" => env_name, "hostname" => overshadow_hostname, "user" => overshadow_user, "pem" => overshadow_pem}
169
+ opt = Canals::CanalOptions.new(args)
170
+ expect(opt.hostname).to eq overshadow_hostname
171
+ expect(opt.user).to eq overshadow_user
172
+ expect(opt.pem).to eq overshadow_pem
173
+ expect(opt.env_name).to eq env_name
174
+ end
175
+
176
+ it "constructs proxy value with overshadowing" do
177
+ overshadow_hostname = "*hostname*"
178
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "env" => env_name, "hostname" => overshadow_hostname}
179
+ opt = Canals::CanalOptions.new(args)
180
+ expect(opt.proxy).to eq "-i #{pem} #{user}@#{overshadow_hostname}"
181
+ end
182
+ end
183
+ end
184
+
185
+
186
+ describe "to_yaml" do
187
+ it "dumps remote_port as int" do
188
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => '1234'}
189
+ yaml = Canals::CanalOptions.new(args).to_yaml
190
+ reparsed = Psych.load(yaml)
191
+ expect(reparsed["remote_port"]).to eq 1234
192
+ expect(reparsed["local_port"]).to eq 1234
193
+ end
194
+
195
+ it "dumps local_port as int" do
196
+ args = {"name" => name, "remote_host" => remote_host, "remote_port" => remote_port, "local_port" => "4321"}
197
+ yaml = Canals::CanalOptions.new(args).to_yaml
198
+ reparsed = Psych.load(yaml)
199
+ expect(reparsed["local_port"]).to eq 4321
200
+ end
201
+ end
202
+ end
203
+
@@ -0,0 +1,4 @@
1
+ $:.unshift File.expand_path("..", __FILE__)
2
+ $:.unshift File.expand_path("../../lib", __FILE__)
3
+
4
+ require 'canals'
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: canals
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.0
5
+ platform: ruby
6
+ authors:
7
+ - Ido Abramovich
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.19.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.19.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: terminal-table
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.4'
55
+ description: A console utility to help build ssh tunnels and keep them up
56
+ email: canals.sf17@abramovich.info
57
+ executables:
58
+ - canal
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rvmrc"
64
+ - Gemfile
65
+ - LICENSE
66
+ - README.md
67
+ - Rakefile
68
+ - assets/canals.sh
69
+ - bin/canal
70
+ - canals.gemspec
71
+ - lib/canals.rb
72
+ - lib/canals/cli.rb
73
+ - lib/canals/cli/environment.rb
74
+ - lib/canals/cli/helpers.rb
75
+ - lib/canals/cli/list.rb
76
+ - lib/canals/cli/session.rb
77
+ - lib/canals/cli/setup.rb
78
+ - lib/canals/config.rb
79
+ - lib/canals/core.rb
80
+ - lib/canals/core_ext/shell_colors.rb
81
+ - lib/canals/core_ext/string.rb
82
+ - lib/canals/environment.rb
83
+ - lib/canals/options.rb
84
+ - lib/canals/repository.rb
85
+ - lib/canals/session.rb
86
+ - lib/canals/tools/assets.rb
87
+ - lib/canals/tools/completion.rb
88
+ - lib/canals/version.rb
89
+ - spec/canals/environment_spec.rb
90
+ - spec/canals/options_spec.rb
91
+ - spec/spec_helper.rb
92
+ homepage: http://github.com/idoa01/canals
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 2.2.0
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project: canals
112
+ rubygems_version: 2.4.6
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Eases the process of creating and managing SSH tunnels
116
+ test_files:
117
+ - spec/canals/environment_spec.rb
118
+ - spec/canals/options_spec.rb
119
+ - spec/spec_helper.rb