infrataster 0.1.3 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ce1087098d32e5590380749af3c3d864cb877ff
4
- data.tar.gz: 3db9a8a5b018a199ce49a90853b0906c820d22fb
3
+ metadata.gz: 09a246ee278ac5692659d4002fbe88abe092955d
4
+ data.tar.gz: b410d985ebfd8285de301a37bf5e539d81216336
5
5
  SHA512:
6
- metadata.gz: 6d03e0bee9d2b39ffaaf1f628c541532702aafe38771f4dc870125cc1e647d20cb1650fbbe9598fb31c5473b6208e26f5e97bf2d180424dc42a070be6f4480d5
7
- data.tar.gz: 50e50689ea235aafbf3aa1729716e7996021310e532bf539be391bdc9a8958cfb73bc813e5e0e5a9994172d3d3ec4c648402d4f6a1a6320d720a2907627612f8
6
+ metadata.gz: c821d85b3b61b7869f07d5e1394ad5fe534727e03f39885149c4d06b4beab92eb277da764c9109629422479f6eadfcd36debf2d043f5129fb755b3f938269b87
7
+ data.tar.gz: 3264f6f21d6f416ac97316a7b10fd39f88bd25260cd17d9d14c3c73237ca5a71c802c8f35741f890828ff5f91c95f8f2cb3dead15115366205fdb47d9e6fecf1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Infrataster Changelog
2
2
 
3
+ ## v0.1.4
4
+
5
+ * Include RSpec::Matchers to use be_xxx matchers. (by @KitaitiMakoto)
6
+ * Don't raise any error for subjects which is not related to Infrataster. (by @KitaitiMakoto)
7
+
3
8
  ## v0.1.3
4
9
 
5
10
  * Don't create multiple phantomjs and browsermob proxy. `capybara` resources become faster.
data/README.md CHANGED
@@ -4,9 +4,7 @@
4
4
 
5
5
  Infrastructure Behavior Testing Framework.
6
6
 
7
- ## Usage
8
-
9
- **You can see [example directory](example) too.**
7
+ ## Basic Usage with Vagrant
10
8
 
11
9
  First, create `Gemfile`:
12
10
 
@@ -22,6 +20,32 @@ Install gems:
22
20
  $ bundle install
23
21
  ```
24
22
 
23
+ Install Vagrant: [Official Docs](http://docs.vagrantup.com/v2/installation/index.html)
24
+
25
+ Create Vagrantfile:
26
+
27
+ ```ruby
28
+ # Vagrantfile
29
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
30
+ config.vm.box = "hashicorp/precise64"
31
+
32
+ config.vm.define :proxy do |c|
33
+ c.vm.network "private_network", ip: "192.168.33.10"
34
+ c.vm.network "private_network", ip: "171.16.33.10", virtualbox__intnet: "infrataster-example"
35
+ end
36
+
37
+ config.vm.define :app do |c|
38
+ c.vm.network "private_network", ip: "171.16.33.11", virtualbox__intnet: "infrataster-example"
39
+ end
40
+ end
41
+ ```
42
+
43
+ Start VMs:
44
+
45
+ ```
46
+ $ vagrant up
47
+ ```
48
+
25
49
  Initialize rspec directory:
26
50
 
27
51
  ```
@@ -47,21 +71,8 @@ Infrataster::Server.define(
47
71
  vagrant: true, # for vagrant VM
48
72
  from: :proxy # access to this machine via SSH port forwarding from proxy
49
73
  )
50
- Infrataster::Server.define(
51
- :db, # name
52
- '172.16.33.12', # ip address
53
- vagrant: true, # for vagrant VM
54
- from: :app, # access to this machine via SSH port forwarding from app
55
- mysql: {user: 'app', password: 'app'}
56
- # settings for MySQL
57
- )
58
- ```
59
-
60
- If you use `capybara`, you should download and extract [BrowserMob Proxy](http://bmp.lightbody.net/) and set `Infrataster::BrowsermobProxy.bin_path` to binary path in `spec/spec_helper.rb`:
61
74
 
62
- ```ruby
63
- # spec/spec_helper.rb
64
- Infrataster::BrowsermobProxy.bin_path = '/path/to/browsermob/bin/browsermob'
75
+ # Code generated by `rspec --init` is following...
65
76
  ```
66
77
 
67
78
  Then, you can write spec files:
@@ -76,75 +87,174 @@ describe server(:app) do
76
87
  expect(response.body).to include('Hello Sinatra')
77
88
  end
78
89
  it "responds as 'text/html'" do
79
- expect(response.header.content_type).to eq('text/html')
80
- end
81
- end
82
- describe capybara('http://app') do
83
- it "responds content including 'Hello Sinatra'" do
84
- visit '/'
85
- expect(page).to have_content('Hello Sinatra')
90
+ expect(response.headers['content-type']).to match(%r{^text/html})
86
91
  end
87
92
  end
88
93
  end
94
+ ```
89
95
 
90
- describe server(:db) do
91
- describe mysql_query('SHOW STATUS') do
92
- it 'responds uptime' do
93
- row = results.find {|r| r['Variable_name'] == 'Uptime' }
94
- expect(row['Value'].to_i).to be > 0
95
- end
96
- end
97
- end
96
+ Run tests:
98
97
 
99
- describe server(:proxy) do
100
- describe http('http://app') do
98
+ ```
99
+ $ bundle exec rspec
100
+ 2 examples, 2 failures
101
+ ```
102
+
103
+ Currently, the tests failed because the VM doesn't respond to HTTP request.
104
+
105
+ It's time to write provisioning instruction like Chef's cookbooks or Puppet's manifests!
106
+
107
+ ## Server
108
+
109
+ "Server" is a server you tests. This supports Vagrant, which is very useful to run servers for testing. Of course, you can test real servers.
110
+
111
+ You should define servers in `spec_helper.rb` like the following:
112
+
113
+ ```ruby
114
+ Infrataster::Server.define(
115
+ # Name of the server, this will be used in the spec files.
116
+ :proxy,
117
+ # IP address of the server
118
+ '192.168.44.10',
119
+ # If the server is provided by vagrant and this option is true,
120
+ # SSH configuration to connect to this server is got from `vagrant ssh-config` command automatically.
121
+ vagrant: true,
122
+ )
123
+
124
+ Infrataster::Server.define(
125
+ # Name of the server, this will be used in the spec files.
126
+ :app,
127
+ # IP address of the server
128
+ '172.16.44.11',
129
+ # If the server is provided by vagrant and this option is true,
130
+ # SSH configuration to connect to this server is got from `vagrant ssh-config` command automatically.
131
+ vagrant: true,
132
+ # Which gateway is used to connect to this server by SSH port forwarding?
133
+ from: :proxy,
134
+ # options for resources
135
+ mysql: {user: 'app', password: 'app'},
136
+ )
137
+ ```
138
+
139
+ You can specify SSH configuration manually too:
140
+
141
+ ```ruby
142
+ Infrataster::Server.define(
143
+ # ...
144
+ ssh: {host: 'hostname', user: 'testuser', keys: ['/path/to/id_rsa']}
145
+ )
146
+ ```
147
+
148
+ ## Resources
149
+
150
+ "Resource" is what you test by Infrataster. For instance, the following code describes `http` resource.
151
+
152
+ ```ruby
153
+ describe server(:app) do
154
+ describe http('http://example.com') do
101
155
  it "responds content including 'Hello Sinatra'" do
102
156
  expect(response.body).to include('Hello Sinatra')
103
157
  end
104
158
  end
105
- describe http('http://static') do
106
- it "responds content including 'Welcome to nginx!'" do
107
- expect(response.body).to include('Welcome to nginx!')
159
+ end
160
+ ```
161
+
162
+ ### `http` resource
163
+
164
+ `http` resource tests HTTP response when sending HTTP request.
165
+ It accepts `method`, `params` and `header` as options.
166
+
167
+ ```ruby
168
+ describe server(:app) do
169
+ describe http(
170
+ 'http://app.example.com',
171
+ method: :post,
172
+ params: {'foo' => 'bar'},
173
+ headers: {'USER' => 'VALUE'}
174
+ ) do
175
+ it "responds with content including 'app'" do
176
+ expect(response.body).to include('app')
177
+
178
+ # `response` is a instance of `Faraday::Response`
179
+ # See: https://github.com/lostisland/faraday/blob/master/lib/faraday/response.rb
108
180
  end
109
181
  end
110
- describe capybara('http://app') do
111
- it "responds content including 'Hello Sinatra'" do
182
+ end
183
+ ```
184
+
185
+ ### `capybara` resource
186
+
187
+ `capybara` resource tests your web application by simulating real user's interaction.
188
+
189
+ ```ruby
190
+ describe server(:app) do
191
+ describe capybara('http://app.example.com') do
192
+ it 'shows food list' do
112
193
  visit '/'
113
- expect(page).to have_content('Hello Sinatra')
194
+ click_link 'Foods'
195
+ expect(page).to have_content 'Yummy Soup'
114
196
  end
115
197
  end
116
- describe capybara('http://static') do
117
- it "responds content including 'Welcome to nginx!'" do
118
- visit '/'
119
- expect(page).to have_content('Welcome to nginx!')
198
+ end
199
+ ```
200
+
201
+ If you use `capybara`, you should download and extract [BrowserMob Proxy](http://bmp.lightbody.net/) and set `Infrataster::BrowsermobProxy.bin_path` to binary path in `spec/spec_helper.rb`:
202
+
203
+ ```ruby
204
+ # spec/spec_helper.rb
205
+ Infrataster::BrowsermobProxy.bin_path = '/path/to/browsermob/bin/browsermob'
206
+ ```
207
+
208
+ (BrowserMob Proxy is needed to manipulate Host HTTP header.)
209
+
210
+ ### `mysql_query` resource
211
+
212
+ `mysql_query` resource tests responce for mysql query.
213
+
214
+ ```ruby
215
+ describe server(:db) do
216
+ describe mysql_query('SHOW STATUS') do
217
+ it 'returns positive uptime' do
218
+ row = results.find {|r| r['Variable_name'] == 'Uptime' }
219
+ expect(row['Value'].to_i).to be > 0
220
+
221
+ # `results` is a instance of `Mysql2::Result`
222
+ # See: https://github.com/brianmario/mysql2
120
223
  end
121
224
  end
122
225
  end
123
226
  ```
124
227
 
228
+ You can specify username and password by options passed to `Infrataster::Server.define`:
229
+
230
+ ```ruby
231
+ Infrataster::Server.define(
232
+ # ...
233
+ mysql: {user: 'app', password: 'app'}
234
+ )
235
+ ```
236
+
125
237
  ## Example
126
238
 
127
- [infrataster/example](example)
239
+ * [example](example)
240
+ * [spec/integration](spec/integration)
128
241
 
129
- ## How to Run Tests
242
+ ## Tests
130
243
 
131
244
  ### Unit Tests
132
245
 
246
+ Unit tests are under `spec/unit` directory.
247
+
133
248
  ```
134
249
  $ bundle exec rake spec:unit
135
250
  ```
136
251
 
137
252
  ### Integration Tests
138
253
 
139
- Start and provision VMs:
254
+ Integration tests are under `spec/integration` directory.
140
255
 
141
256
  ```
142
257
  $ bundle exec rake spec:integration:prepare
143
- ```
144
-
145
- Run tests:
146
-
147
- ```
148
258
  $ bundle exec rake spec:integration
149
259
  ```
150
260
 
@@ -152,6 +262,10 @@ $ bundle exec rake spec:integration
152
262
 
153
263
  * https://speakerdeck.com/ryotarai/infrataster-infra-behavior-testing-framework-number-oedo04
154
264
 
265
+ ## Changelog
266
+
267
+ [Changelog](CHANGELOG.md)
268
+
155
269
  ## Contributing
156
270
 
157
271
  1. Fork it ( http://github.com/ryotarai/infrataster/fork )
data/Rakefile CHANGED
@@ -20,6 +20,9 @@ namespace :spec do
20
20
  namespace :integration do
21
21
  integration_dir = 'spec/integration'
22
22
 
23
+ task :clean => ['destroy_vm', 'remove_berks'] do
24
+ end
25
+
23
26
  task :prepare => ['download_browsermob', 'start_vm'] do
24
27
  end
25
28
 
@@ -56,6 +59,16 @@ namespace :spec do
56
59
  puts yellow('Starting VM...')
57
60
  system '/usr/bin/vagrant up'
58
61
  end
62
+
63
+ task :destroy_vm do
64
+ puts yellow('Destroying VM...')
65
+ system '/usr/bin/vagrant destroy -f'
66
+ end
67
+
68
+ task :remove_berks do
69
+ dir = File.join(integration_dir, 'vm/vendor/cookbooks')
70
+ FileUtils.rm_rf(dir)
71
+ end
59
72
  end
60
73
  end
61
74
 
data/ci/jenkins_build ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ def exec(cmd, exit_if_fail = true)
4
+ env = {'CI' => 'true'}
5
+ system env, cmd
6
+ if exit_if_fail && $?.exitstatus != 0
7
+ puts "`#{cmd}` failed"
8
+ exit $?.exitstatus
9
+ end
10
+
11
+ $?.exitstatus
12
+ end
13
+
14
+ exec 'bundle install --path=vendor/bundle --jobs=4'
15
+
16
+ exec 'bundle exec rake spec:unit'
17
+
18
+ exec 'bundle exec rake spec:integration:prepare'
19
+ status = exec('bundle exec rake spec:integration', false)
20
+ exec 'bundle exec rake spec:integration:clean'
21
+ exit status
22
+
@@ -21,7 +21,7 @@ module Infrataster
21
21
 
22
22
  private
23
23
  def start_server
24
- BrowserMob::Proxy::Server.new(find_bin).tap do |server|
24
+ BrowserMob::Proxy::Server.new(find_bin, timeout: 60).tap do |server|
25
25
  server.start
26
26
  end
27
27
  end
@@ -40,7 +40,8 @@ module Infrataster
40
40
  proxy = BrowsermobProxy.proxy
41
41
  proxy.header({"Host" => resource.uri.host})
42
42
 
43
- address, port, @gateway_finalize_proc = server.from_gateway_open(resource.uri.port)
43
+ address, port, @gateway_finalize_proc =
44
+ server.open_gateway_on_from_server(resource.uri.port)
44
45
  Capybara.app_host = "http://#{address}:#{port}"
45
46
  end
46
47
 
@@ -48,8 +49,10 @@ module Infrataster
48
49
  @gateway_finalize_proc.call if @gateway_finalize_proc
49
50
  end
50
51
 
51
- def method_missing(method, *args)
52
- session.public_send(method, *args)
52
+ Capybara::Session::DSL_METHODS.each do |method|
53
+ define_method method do |*args, &block|
54
+ page.send method, *args, &block
55
+ end
53
56
  end
54
57
  end
55
58
  end
@@ -4,7 +4,7 @@ module Infrataster
4
4
  module Contexts
5
5
  class HttpContext < BaseContext
6
6
  def response
7
- server.from_gateway(resource.uri.port) do |address, port|
7
+ server.gateway_on_from_server(resource.uri.port) do |address, port|
8
8
  url = "#{resource.uri.scheme}://#{address}:#{port}"
9
9
 
10
10
  conn = Faraday.new(:url => url) do |faraday|
@@ -9,7 +9,7 @@ module Infrataster
9
9
  options = options.merge(server.options[:mysql])
10
10
  end
11
11
 
12
- server.from_gateway(options[:port]) do |address, new_port|
12
+ server.gateway_on_from_server(options[:port]) do |address, new_port|
13
13
  client = Mysql2::Client.new(
14
14
  host: address,
15
15
  port: new_port,
@@ -10,10 +10,12 @@ module Infrataster
10
10
  def from_example(example)
11
11
  example_group = example.metadata[:example_group]
12
12
 
13
- server = find_described(Resources::ServerResource, example_group).server
13
+ server_resource = find_described(Resources::ServerResource, example_group)
14
14
  resource = find_described(Resources::BaseResource, example_group)
15
15
 
16
- resource.context_class.new(server, resource)
16
+ return if [server_resource, resource].any? &:nil?
17
+
18
+ resource.context_class.new(server_resource.server, resource)
17
19
  end
18
20
 
19
21
  private
@@ -25,8 +27,6 @@ module Infrataster
25
27
  parent_example_group = example_group[:example_group]
26
28
  if parent_example_group
27
29
  find_described(resource_class, parent_example_group)
28
- else
29
- raise Error
30
30
  end
31
31
  end
32
32
  end
@@ -3,6 +3,8 @@ require 'infrataster/resources'
3
3
  module Infrataster
4
4
  module Helpers
5
5
  module ResourceHelper
6
+ include RSpec::Matchers
7
+
6
8
  def server(*args)
7
9
  Resources::ServerResource.new(*args)
8
10
  end
@@ -83,7 +83,7 @@ module Infrataster
83
83
  end
84
84
  end
85
85
 
86
- def from_gateway_open(port)
86
+ def open_gateway_on_from_server(port)
87
87
  if from
88
88
  new_port, finalize_proc = from.gateway_open(@address, port)
89
89
  Logger.debug("tunnel: localhost:#{new_port} -> #{from.address} -> #{@address}:#{port}")
@@ -93,7 +93,7 @@ module Infrataster
93
93
  end
94
94
  end
95
95
 
96
- def from_gateway(port)
96
+ def gateway_on_from_server(port)
97
97
  if from
98
98
  from.gateway_open(@address, port) do |new_port|
99
99
  Logger.debug("tunnel: localhost:#{new_port} -> #{from.address} -> #{@address}:#{port}")
@@ -1,3 +1,3 @@
1
1
  module Infrataster
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -1,6 +1,12 @@
1
1
  require 'integration/spec_helper'
2
2
  require 'json'
3
3
 
4
+ describe 'Normal subject not related to Infrataster' do
5
+ it "doesn't raise any error" do
6
+ expect(subject).not_to raise_error
7
+ end
8
+ end
9
+
4
10
  describe server(:proxy) do
5
11
  describe http('http://app.example.com') do
6
12
  it "sends GET request with Host header" do
@@ -24,10 +30,12 @@ describe server(:app) do
24
30
  end
25
31
  end
26
32
 
27
- describe http('http://app.example.com', params: {'foo' => 'bar'}, headers: {'USER' => 'VALUE'}) do
33
+ describe http('http://app.example.com/path/to/resource', params: {'foo' => 'bar'}, headers: {'USER' => 'VALUE'}) do
28
34
  it "sends GET request with params" do
29
35
  expect(body_as_json['method']).to eq('GET')
36
+ expect(body_as_json['path']).to eq('/path/to/resource')
30
37
  expect(body_as_json['params']).to eq({"foo" => "bar"})
38
+ expect(body_as_json['headers']['USER']).not_to be_empty
31
39
  expect(body_as_json['headers']['USER']).to eq('VALUE')
32
40
  end
33
41
  end
@@ -36,6 +44,7 @@ describe server(:app) do
36
44
  it "sends POST request with params" do
37
45
  expect(body_as_json['method']).to eq('POST')
38
46
  expect(body_as_json['params']).to eq({"foo" => "bar"})
47
+ expect(body_as_json['headers']['USER']).not_to be_empty
39
48
  expect(body_as_json['headers']['USER']).to eq('VALUE')
40
49
  end
41
50
  end
@@ -0,0 +1,11 @@
1
+ require 'integration/spec_helper'
2
+
3
+ describe server(:app) do
4
+ describe mysql_query('SHOW STATUS') do
5
+ it 'responds uptime' do
6
+ row = results.find {|r| r['Variable_name'] == 'Uptime' }
7
+ expect(row['Value'].to_i).to be > 0
8
+ end
9
+ end
10
+ end
11
+
@@ -9,7 +9,8 @@ Infrataster::Server.define(
9
9
  :app,
10
10
  '172.16.44.11',
11
11
  vagrant: true,
12
- from: :proxy
12
+ from: :proxy,
13
+ mysql: {user: 'app', password: 'app'},
13
14
  )
14
15
 
15
16
  Infrataster::BrowsermobProxy.bin_path = File.expand_path('../vm/vendor/browsermob/bin/browsermob-proxy', __FILE__)
@@ -1,3 +1,2 @@
1
- vendor/*
2
1
  .vagrant
3
2
  Berksfile.lock
@@ -11,7 +11,11 @@ INTERNAL_ADDRESSES = {
11
11
  }
12
12
 
13
13
  Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
14
- config.vm.box = "hashicorp/precise64"
14
+ if ENV['CI']
15
+ config.vm.box = "hashicorp/precise32"
16
+ else
17
+ config.vm.box = "hashicorp/precise64"
18
+ end
15
19
 
16
20
  config.vm.define :proxy do |c|
17
21
  c.vm.network "private_network", ip: "192.168.44.10"
@@ -2,25 +2,25 @@ require 'sinatra'
2
2
  require 'json'
3
3
 
4
4
  get '/' do
5
- result = {
6
- 'app' => 'sinatra',
7
- 'method' => 'GET',
8
- 'params' => params,
9
- 'headers' => RequestWrapper.new(request).headers,
10
- }
5
+ result.to_json
6
+ end
11
7
 
8
+ get '/path/to/resource' do
12
9
  result.to_json
13
10
  end
14
11
 
15
12
  post '/' do
16
- result = {
13
+ result.to_json
14
+ end
15
+
16
+ def result
17
+ {
17
18
  'app' => 'sinatra',
18
- 'method' => 'POST',
19
+ 'method' => request.request_method,
20
+ 'path' => request.path_info,
19
21
  'params' => params,
20
22
  'headers' => RequestWrapper.new(request).headers,
21
23
  }
22
-
23
- result.to_json
24
24
  end
25
25
 
26
26
  class RequestWrapper
@@ -0,0 +1,127 @@
1
+ #
2
+ # The MySQL database server configuration file.
3
+ #
4
+ # You can copy this to one of:
5
+ # - "/etc/mysql/my.cnf" to set global options,
6
+ # - "~/.my.cnf" to set user-specific options.
7
+ #
8
+ # One can use all long options that the program supports.
9
+ # Run program with --help to get a list of available options and with
10
+ # --print-defaults to see which it would actually understand and use.
11
+ #
12
+ # For explanations see
13
+ # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
14
+
15
+ # This will be passed to all mysql clients
16
+ # It has been reported that passwords should be enclosed with ticks/quotes
17
+ # escpecially if they contain "#" chars...
18
+ # Remember to edit /etc/mysql/debian.cnf when changing the socket location.
19
+ [client]
20
+ port = 3306
21
+ socket = /var/run/mysqld/mysqld.sock
22
+
23
+ # Here is entries for some specific programs
24
+ # The following values assume you have at least 32M ram
25
+
26
+ # This was formally known as [safe_mysqld]. Both versions are currently parsed.
27
+ [mysqld_safe]
28
+ socket = /var/run/mysqld/mysqld.sock
29
+ nice = 0
30
+
31
+ [mysqld]
32
+ #
33
+ # * Basic Settings
34
+ #
35
+ user = mysql
36
+ pid-file = /var/run/mysqld/mysqld.pid
37
+ socket = /var/run/mysqld/mysqld.sock
38
+ port = 3306
39
+ basedir = /usr
40
+ datadir = /var/lib/mysql
41
+ tmpdir = /tmp
42
+ lc-messages-dir = /usr/share/mysql
43
+ skip-external-locking
44
+ #
45
+ # Instead of skip-networking the default is now to listen only on
46
+ # localhost which is more compatible and is not less secure.
47
+ bind-address = 0.0.0.0
48
+ #
49
+ # * Fine Tuning
50
+ #
51
+ key_buffer = 16M
52
+ max_allowed_packet = 16M
53
+ thread_stack = 192K
54
+ thread_cache_size = 8
55
+ # This replaces the startup script and checks MyISAM tables if needed
56
+ # the first time they are touched
57
+ myisam-recover = BACKUP
58
+ #max_connections = 100
59
+ #table_cache = 64
60
+ #thread_concurrency = 10
61
+ #
62
+ # * Query Cache Configuration
63
+ #
64
+ query_cache_limit = 1M
65
+ query_cache_size = 16M
66
+ #
67
+ # * Logging and Replication
68
+ #
69
+ # Both location gets rotated by the cronjob.
70
+ # Be aware that this log type is a performance killer.
71
+ # As of 5.1 you can enable the log at runtime!
72
+ #general_log_file = /var/log/mysql/mysql.log
73
+ #general_log = 1
74
+ #
75
+ # Error log - should be very few entries.
76
+ #
77
+ log_error = /var/log/mysql/error.log
78
+ #
79
+ # Here you can see queries with especially long duration
80
+ #log_slow_queries = /var/log/mysql/mysql-slow.log
81
+ #long_query_time = 2
82
+ #log-queries-not-using-indexes
83
+ #
84
+ # The following can be used as easy to replay backup logs or for replication.
85
+ # note: if you are setting up a replication slave, see README.Debian about
86
+ # other settings you may need to change.
87
+ #server-id = 1
88
+ #log_bin = /var/log/mysql/mysql-bin.log
89
+ expire_logs_days = 10
90
+ max_binlog_size = 100M
91
+ #binlog_do_db = include_database_name
92
+ #binlog_ignore_db = include_database_name
93
+ #
94
+ # * InnoDB
95
+ #
96
+ # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
97
+ # Read the manual for more InnoDB related options. There are many!
98
+ #
99
+ # * Security Features
100
+ #
101
+ # Read the manual, too, if you want chroot!
102
+ # chroot = /var/lib/mysql/
103
+ #
104
+ # For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
105
+ #
106
+ # ssl-ca=/etc/mysql/cacert.pem
107
+ # ssl-cert=/etc/mysql/server-cert.pem
108
+ # ssl-key=/etc/mysql/server-key.pem
109
+
110
+
111
+
112
+ [mysqldump]
113
+ quick
114
+ quote-names
115
+ max_allowed_packet = 16M
116
+
117
+ [mysql]
118
+ #no-auto-rehash # faster start of mysql but no tab completition
119
+
120
+ [isamchk]
121
+ key_buffer = 16M
122
+
123
+ #
124
+ # * IMPORTANT: Additional settings that can override those from this file!
125
+ # The files must end with '.cnf', otherwise they'll be ignored.
126
+ #
127
+ !includedir /etc/mysql/conf.d/
@@ -33,3 +33,17 @@ end
33
33
 
34
34
  execute 'supervisorctl restart rackup'
35
35
 
36
+ # db
37
+ package 'mysql-server'
38
+
39
+ service 'mysql' do
40
+ action :start
41
+ supports :restart => true
42
+ end
43
+
44
+ cookbook_file '/etc/mysql/my.cnf' do
45
+ notifies :restart, 'service[mysql]'
46
+ end
47
+
48
+ execute "mysql -uroot -e \"GRANT ALL PRIVILEGES ON *.* TO 'app'@'%' IDENTIFIED BY 'app';\""
49
+
@@ -0,0 +1,2 @@
1
+ *
2
+ !.gitignore
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infrataster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Arai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-28 00:00:00.000000000 Z
11
+ date: 2014-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -178,6 +178,7 @@ files:
178
178
  - LICENSE.txt
179
179
  - README.md
180
180
  - Rakefile
181
+ - ci/jenkins_build
181
182
  - infrataster.gemspec
182
183
  - lib/infrataster.rb
183
184
  - lib/infrataster/browsermob_proxy.rb
@@ -200,6 +201,7 @@ files:
200
201
  - lib/infrataster/version.rb
201
202
  - spec/integration/capybara_spec.rb
202
203
  - spec/integration/http_spec.rb
204
+ - spec/integration/mysql_query_spec.rb
203
205
  - spec/integration/spec_helper.rb
204
206
  - spec/integration/vm/.gitignore
205
207
  - spec/integration/vm/Berksfile
@@ -207,12 +209,14 @@ files:
207
209
  - spec/integration/vm/app/Gemfile
208
210
  - spec/integration/vm/app/app.rb
209
211
  - spec/integration/vm/app/config.ru
212
+ - spec/integration/vm/cookbooks/app/files/default/my.cnf
210
213
  - spec/integration/vm/cookbooks/app/files/default/rackup.conf
211
214
  - spec/integration/vm/cookbooks/app/recipes/default.rb
212
215
  - spec/integration/vm/cookbooks/apt-mirror/recipes/default.rb
213
216
  - spec/integration/vm/cookbooks/proxy/files/default/index.html
214
217
  - spec/integration/vm/cookbooks/proxy/recipes/default.rb
215
218
  - spec/integration/vm/cookbooks/proxy/templates/default/integration-test.erb
219
+ - spec/integration/vm/vendor/.gitignore
216
220
  - spec/unit/lib/infrataster/server_spec.rb
217
221
  - spec/unit/spec_helper.rb
218
222
  homepage: https://github.com/ryotarai/infrataster
@@ -242,6 +246,7 @@ summary: Infrastructure Behavior Testing Framework
242
246
  test_files:
243
247
  - spec/integration/capybara_spec.rb
244
248
  - spec/integration/http_spec.rb
249
+ - spec/integration/mysql_query_spec.rb
245
250
  - spec/integration/spec_helper.rb
246
251
  - spec/integration/vm/.gitignore
247
252
  - spec/integration/vm/Berksfile
@@ -249,11 +254,13 @@ test_files:
249
254
  - spec/integration/vm/app/Gemfile
250
255
  - spec/integration/vm/app/app.rb
251
256
  - spec/integration/vm/app/config.ru
257
+ - spec/integration/vm/cookbooks/app/files/default/my.cnf
252
258
  - spec/integration/vm/cookbooks/app/files/default/rackup.conf
253
259
  - spec/integration/vm/cookbooks/app/recipes/default.rb
254
260
  - spec/integration/vm/cookbooks/apt-mirror/recipes/default.rb
255
261
  - spec/integration/vm/cookbooks/proxy/files/default/index.html
256
262
  - spec/integration/vm/cookbooks/proxy/recipes/default.rb
257
263
  - spec/integration/vm/cookbooks/proxy/templates/default/integration-test.erb
264
+ - spec/integration/vm/vendor/.gitignore
258
265
  - spec/unit/lib/infrataster/server_spec.rb
259
266
  - spec/unit/spec_helper.rb