canals 0.8.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,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