haproxy-tools 0.1.0 → 0.2.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.
@@ -1,31 +1,32 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "HAProxy::Parser" do
4
+
4
5
  context 'multi-pool config file' do
5
6
  before(:each) do
6
7
  @parser = HAProxy::Parser.new
7
- @config = @parser.parse('spec/fixtures/multi-pool.haproxy.cfg')
8
+ @config = @parser.parse_file('spec/fixtures/multi-pool.haproxy.cfg')
8
9
  end
9
10
 
10
- it "parses a named backends from a config file" do
11
- @config.backends.size.should == 3
11
+ it "parses a named backend from a config file" do
12
+ @config.backends.size.should == 2
12
13
  logs_backend = @config.backend('logs')
13
14
 
14
15
  logs_backend.servers.size.should == 3
15
16
 
16
17
  server1 = logs_backend.servers['prd_log_1']
17
18
  server1.name.should == 'prd_log_1'
18
- server1.ip.should == '10.245.174.75'
19
+ server1.host.should == '10.245.174.75'
19
20
  server1.port.should == '8000'
20
21
 
21
22
  server2 = logs_backend.servers['fake_logger']
22
23
  server2.name.should == 'fake_logger'
23
- server2.ip.should == '127.0.0.1'
24
+ server2.host.should == '127.0.0.1'
24
25
  server2.port.should == '9999'
25
26
 
26
27
  server3 = logs_backend.servers['prd_log_2']
27
28
  server3.name.should == 'prd_log_2'
28
- server3.ip.should == '10.215.157.10'
29
+ server3.host.should == '10.215.157.10'
29
30
  server3.port.should == '8000'
30
31
  end
31
32
  end
@@ -33,48 +34,68 @@ describe "HAProxy::Parser" do
33
34
  context 'basic config file' do
34
35
  before(:each) do
35
36
  @parser = HAProxy::Parser.new
36
- @config = @parser.parse('spec/fixtures/simple.haproxy.cfg')
37
+ @config = @parser.parse_file('spec/fixtures/simple.haproxy.cfg')
37
38
  end
38
39
 
39
40
  it "parses global variables from a config file" do
40
41
  @config.global.size.should == 3
41
- @config.global['maxconn'].should == ['4096']
42
- @config.global['daemon'].should == []
43
- @config.global['nbproc'].should == ['4']
42
+ @config.global['maxconn'].should == '4096'
43
+ @config.global['daemon'].should == nil
44
+ @config.global['nbproc'].should == '4'
44
45
  end
45
46
 
46
- it "parses default variables from a config file" do
47
- @config.defaults.size.should == 7
48
- @config.defaults['mode'].should == ['http']
49
- @config.defaults['clitimeout'].should == ['60000']
50
- @config.defaults['srvtimeout'].should == ['30000']
51
- @config.defaults['contimeout'].should == ['4000']
52
- @config.defaults['listen'].should == [['http_proxy', '55.55.55.55:80']]
53
- @config.defaults['balance'].should == ['roundrobin']
54
- @config.defaults['option'].should == ['httpclose','httpchk','forwardfor']
47
+ it "parses a default set from a config file" do
48
+ @config.defaults.size.should == 1
49
+
50
+ defaults = @config.defaults.first
51
+ defaults.config['mode'].should == 'http'
52
+ defaults.config['clitimeout'].should == '60000'
53
+ defaults.config['srvtimeout'].should == '30000'
54
+ defaults.config['contimeout'].should == '4000'
55
+
56
+ defaults.options.size.should == 1
57
+ defaults.options.should include('httpclose')
55
58
  end
56
59
 
57
- it "parses a default backends from a config file" do
58
- @config.backends.size.should == 1
60
+ it 'parses a listener from a config file' do
61
+ @config.listeners.size.should == 1
59
62
 
60
- pool = @config.backends.first
63
+ listener = @config.listener('http_proxy')
64
+ listener.name.should == 'http_proxy'
65
+ listener.host.should == '55.55.55.55'
66
+ listener.port.should == '80'
67
+ listener.config['balance'].should == 'roundrobin'
61
68
 
62
- pool.servers.size.should == 3
69
+ listener.options.size.should == 2
70
+ listener.options.should include('httpchk')
71
+ listener.options.should include('forwardfor')
63
72
 
64
- server1 = pool.servers['web1']
73
+ listener.servers.size.should == 3
74
+
75
+ server1 = listener.servers['web1']
65
76
  server1.name.should == 'web1'
66
- server1.ip.should == '66.66.66.66'
77
+ server1.host.should == '66.66.66.66'
67
78
  server1.port.should == '80'
79
+ server1.attributes['weight'].should == '1'
80
+ server1.attributes['maxconn'].should == '512'
81
+ server1.attributes['check'].should == true
68
82
 
69
- server2 = pool.servers['web2']
83
+ server2 = listener.servers['web2']
70
84
  server2.name.should == 'web2'
71
- server2.ip.should == '77.77.77.77'
85
+ server2.host.should == '77.77.77.77'
72
86
  server2.port.should == '80'
87
+ server2.attributes['weight'].should == '1'
88
+ server2.attributes['maxconn'].should == '512'
89
+ server2.attributes['check'].should == true
73
90
 
74
- server3 = pool.servers['web3']
91
+ server3 = listener.servers['web3']
75
92
  server3.name.should == 'web3'
76
- server3.ip.should == '88.88.88.88'
93
+ server3.host.should == '88.88.88.88'
77
94
  server3.port.should == '80'
95
+ server3.attributes['weight'].should == '1'
96
+ server3.attributes['maxconn'].should == '512'
97
+ server3.attributes['check'].should == true
78
98
  end
79
99
  end
80
100
  end
101
+
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ describe HAProxy::Treetop::ConfigParser do
4
+ before(:each) do
5
+ @parser = HAProxy::Treetop::ConfigParser.new
6
+ end
7
+
8
+ def parse_file(filename)
9
+ @result = @parser.parse(File.read(filename))
10
+ if @result.nil?
11
+ puts
12
+ puts "Failure Reason: #{@parser.failure_reason}"
13
+ end
14
+
15
+ # HAProxy::Treetop.print_node(@result, 0, :max_depth => 3)
16
+ end
17
+
18
+ def parse_single_pool
19
+ parse_file('spec/fixtures/simple.haproxy.cfg')
20
+ end
21
+
22
+ def parse_multi_pool
23
+ parse_file('spec/fixtures/multi-pool.haproxy.cfg')
24
+ end
25
+
26
+ it "can parse servers from a backend server block" do
27
+ parse_multi_pool
28
+
29
+ backend = @result.backends.first
30
+ backend.servers.size.should == 4
31
+ backend.servers[0].name.should == 'prd_www_1'
32
+ backend.servers[0].host.should == '10.214.78.95'
33
+ backend.servers[0].port.should == '8000'
34
+ end
35
+
36
+ it 'can parse a service address from a frontend header' do
37
+ parse_multi_pool
38
+
39
+ frontend = @result.frontends.first
40
+ frontend.frontend_header.service_address.host.content.should == '*'
41
+ frontend.frontend_header.service_address.port.content.should == '85'
42
+ end
43
+
44
+ it 'can parse a service address from a listen header' do
45
+ parse_single_pool
46
+
47
+ listener = @result.listeners.first
48
+ listener.listen_header.service_address.host.content.should == '55.55.55.55'
49
+ listener.listen_header.service_address.port.content.should == '80'
50
+ end
51
+
52
+ it 'can parse a file with a listen section' do
53
+ parse_single_pool
54
+
55
+ @result.class.should == HAProxy::Treetop::ConfigurationFile
56
+ @result.elements.size.should == 4
57
+
58
+ @result.global.should == @result.elements[1]
59
+ @result.elements[1].class.should == HAProxy::Treetop::GlobalSection
60
+
61
+ @result.defaults[0].should == @result.elements[2]
62
+ @result.elements[2].class.should == HAProxy::Treetop::DefaultsSection
63
+
64
+ @result.listeners[0].should == @result.elements[3]
65
+ @result.elements[3].class.should == HAProxy::Treetop::ListenSection
66
+ end
67
+
68
+ it 'can parse a file with frontend/backend sections' do
69
+ parse_multi_pool
70
+
71
+ @result.class.should == HAProxy::Treetop::ConfigurationFile
72
+ @result.elements.size.should == 5
73
+
74
+ @result.global.should == @result.elements[0]
75
+ @result.elements[0].class.should == HAProxy::Treetop::GlobalSection
76
+
77
+ @result.defaults[0].should == @result.elements[1]
78
+ @result.elements[1].class.should == HAProxy::Treetop::DefaultsSection
79
+
80
+ @result.frontends[0].should == @result.elements[2]
81
+ @result.elements[2].class.should == HAProxy::Treetop::FrontendSection
82
+
83
+ @result.backends[0].should == @result.elements[3]
84
+ @result.backends[1].should == @result.elements[4]
85
+ @result.elements[3].class.should == HAProxy::Treetop::BackendSection
86
+ @result.elements[4].class.should == HAProxy::Treetop::BackendSection
87
+ end
88
+
89
+ it 'can parse userlist sections'
90
+ it 'can parse valid units of time'
91
+ it 'can parse strings with escaped spaces'
92
+ it 'can parse files with escaped quotes'
93
+ it 'can parse keywords with hyphens'
94
+ end
95
+
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haproxy-tools
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jason Wadsworth
@@ -15,62 +15,74 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-23 00:00:00 -05:00
18
+ date: 2012-04-24 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  prerelease: false
23
- name: rspec
24
- type: :development
23
+ name: net-scp
24
+ type: :runtime
25
25
  version_requirements: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
28
- - - ~>
28
+ - - ">="
29
29
  - !ruby/object:Gem::Version
30
- hash: 19
30
+ hash: 3
31
31
  segments:
32
- - 2
33
- - 7
34
32
  - 0
35
- version: 2.7.0
33
+ version: "0"
36
34
  requirement: *id001
37
35
  - !ruby/object:Gem::Dependency
38
36
  prerelease: false
39
- name: yard
40
- type: :development
37
+ name: orderedhash
38
+ type: :runtime
41
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
42
40
  none: false
43
41
  requirements:
44
- - - ~>
42
+ - - ">="
45
43
  - !ruby/object:Gem::Version
46
44
  hash: 3
47
45
  segments:
48
46
  - 0
49
- - 7
50
- - 0
51
- version: 0.7.0
47
+ version: "0"
52
48
  requirement: *id002
53
49
  - !ruby/object:Gem::Dependency
54
50
  prerelease: false
55
- name: bundler
51
+ name: rspec
56
52
  type: :development
57
53
  version_requirements: &id003 !ruby/object:Gem::Requirement
58
54
  none: false
59
55
  requirements:
60
56
  - - ~>
61
57
  - !ruby/object:Gem::Version
62
- hash: 23
58
+ hash: 19
63
59
  segments:
64
- - 1
65
- - 0
60
+ - 2
61
+ - 7
66
62
  - 0
67
- version: 1.0.0
63
+ version: 2.7.0
68
64
  requirement: *id003
69
65
  - !ruby/object:Gem::Dependency
70
66
  prerelease: false
71
- name: jeweler
67
+ name: yard
72
68
  type: :development
73
69
  version_requirements: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
77
+ - 7
78
+ - 0
79
+ version: 0.7.0
80
+ requirement: *id004
81
+ - !ruby/object:Gem::Dependency
82
+ prerelease: false
83
+ name: jeweler
84
+ type: :development
85
+ version_requirements: &id005 !ruby/object:Gem::Requirement
74
86
  none: false
75
87
  requirements:
76
88
  - - ~>
@@ -81,12 +93,12 @@ dependencies:
81
93
  - 6
82
94
  - 4
83
95
  version: 1.6.4
84
- requirement: *id004
96
+ requirement: *id005
85
97
  - !ruby/object:Gem::Dependency
86
98
  prerelease: false
87
99
  name: rcov
88
100
  type: :development
89
- version_requirements: &id005 !ruby/object:Gem::Requirement
101
+ version_requirements: &id006 !ruby/object:Gem::Requirement
90
102
  none: false
91
103
  requirements:
92
104
  - - ">="
@@ -95,7 +107,21 @@ dependencies:
95
107
  segments:
96
108
  - 0
97
109
  version: "0"
98
- requirement: *id005
110
+ requirement: *id006
111
+ - !ruby/object:Gem::Dependency
112
+ prerelease: false
113
+ name: treetop
114
+ type: :development
115
+ version_requirements: &id007 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ hash: 3
121
+ segments:
122
+ - 0
123
+ version: "0"
124
+ requirement: *id007
99
125
  description: Ruby tools for HAProxy, including config file management.
100
126
  email: jdwadsworth@gmail.com
101
127
  executables: []
@@ -105,22 +131,32 @@ extensions: []
105
131
  extra_rdoc_files:
106
132
  - LICENSE.txt
107
133
  - README.rdoc
134
+ - TODO
108
135
  files:
109
136
  - .document
110
137
  - .rspec
138
+ - CHANGES.rdoc
111
139
  - Gemfile
112
140
  - LICENSE.txt
113
141
  - README.rdoc
114
142
  - Rakefile
143
+ - TODO
115
144
  - VERSION
145
+ - docs/haproxy-1.3-configuration.txt
146
+ - docs/haproxy-1.4-configuration.txt
147
+ - haproxy-tools.gemspec
116
148
  - lib/haproxy-tools.rb
117
149
  - lib/haproxy/config.rb
118
150
  - lib/haproxy/parser.rb
151
+ - lib/haproxy/renderer.rb
152
+ - lib/haproxy/treetop/config.treetop
153
+ - lib/haproxy/treetop/nodes.rb
119
154
  - lib/haproxy_tools.rb
120
155
  - spec/fixtures/multi-pool.haproxy.cfg
121
156
  - spec/fixtures/simple.haproxy.cfg
122
157
  - spec/haproxy/config_spec.rb
123
158
  - spec/haproxy/parser_spec.rb
159
+ - spec/haproxy/treetop/config_parser_spec.rb
124
160
  - spec/spec_helper.rb
125
161
  has_rdoc: true
126
162
  homepage: http://github.com/subakva/haproxy-tools