toxiproxy 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: c4abc83dd0b261de59236fbfe5a2e3a0660ca2b0
4
- data.tar.gz: 67d9083dd5672fd70cf53365b5d550d86edfca82
3
+ metadata.gz: 841ffa13a93004733dc2adfa28c71bc641ee5981
4
+ data.tar.gz: dbbf44472e95affc62b5143685ce50429924ce9e
5
5
  SHA512:
6
- metadata.gz: f0cd49f6f4b93c88a532ca43087a8c54a46907210ccf5693d970b3f8edbdf73a6a5efc550623a8e9ac9fe02be8a59c5790403fc59a52f662907c1a11aa8aa752
7
- data.tar.gz: d6dd0670c4505efdf609e41e8938053a6318595ea8176a89724d5e768156ec9f03d5e8043442dd952af83f3f42a54ec110dd6cd3754a7035b9c161719578a1f2
6
+ metadata.gz: d27b3bec80952c35dec464d1b9cc3d952651af99e209d397a80695f0bd6573749e10846785866f6bb851bd02e4a7437a88f2d27979b46a2b42e3a616a913c2dc
7
+ data.tar.gz: b4171531e74753276229f73163afcb44a41b0e4df88929c4746deabed8d4114c5e12060705034e3221a43d6bdc640d7d1a7018303d9f3a06ce91c5be51fdd759
data/README.md CHANGED
@@ -17,7 +17,12 @@ documentation](https://github.com/shopify/toxiproxy)
17
17
 
18
18
  ## Usage
19
19
 
20
- The Ruby client communicates with the Toxiproxy daemon via HTTP.
20
+ The Ruby client communicates with the Toxiproxy daemon via HTTP. By default it
21
+ connects to `http://127.0.0.1:8474`, but you can point to any host:
22
+
23
+ ```ruby
24
+ Toxiproxy.host = 'http://toxiproxy.local:5665'
25
+ ```
21
26
 
22
27
  For example, to simulate 1000ms latency on a database server you can use the
23
28
  `latency` toxic with the `latency` argument (see the Toxiproxy project for a
@@ -79,7 +84,7 @@ Toxiproxy.populate([{
79
84
  name: "mysql_read_only",
80
85
  listen: "localhost:21213",
81
86
  upstream: "localhost:3306",
82
- })
87
+ }])
83
88
  ```
84
89
 
85
90
  This will create the proxies passed, or replace the proxies if they already exist in Toxiproxy.
@@ -1,8 +1,9 @@
1
1
  #!/bin/bash -e
2
2
 
3
3
  VERSION='21a264cc75549c3ae837b606eb6e17ea'
4
+ TOXIPROXY_LOG_DIR=${CIRCLE_ARTIFACTS:-'/tmp'}
4
5
 
5
6
  echo "[start toxiproxy]"
6
7
  curl --silent http://shopify-vagrant.s3.amazonaws.com/toxiproxy/toxiproxy-$VERSION -o ./bin/toxiproxy
7
8
  chmod +x ./bin/toxiproxy
8
- nohup bash -c "./bin/toxiproxy > ${CIRCLE_ARTIFACTS}/toxiproxy.log 2>&1 &"
9
+ nohup bash -c "./bin/toxiproxy > ${TOXIPROXY_LOG_DIR}/toxiproxy.log 2>&1 &"
@@ -1,13 +1,16 @@
1
1
  require "json"
2
2
  require "uri"
3
3
  require "net/http"
4
+ require "forwardable"
4
5
 
5
6
  require "toxiproxy/collection"
6
7
  require "toxiproxy/toxic"
7
8
  require "toxiproxy/toxic_collection"
8
9
 
9
10
  class Toxiproxy
10
- URI = ::URI.parse("http://127.0.0.1:8474")
11
+ extend SingleForwardable
12
+
13
+ DEFAULT_URI = 'http://127.0.0.1:8474'
11
14
  VALID_DIRECTIONS = [:upstream, :downstream]
12
15
 
13
16
  class NotFound < StandardError; end
@@ -23,16 +26,7 @@ class Toxiproxy
23
26
  @enabled = options[:enabled]
24
27
  end
25
28
 
26
- # Forwardable doesn't support delegating class methods, so we resort to
27
- # `define_method` to delegate from Toxiproxy to #all, and from there to the
28
- # proxy collection.
29
- class << self
30
- Collection::METHODS.each do |method|
31
- define_method(method) do |*args, &block|
32
- self.all.send(method, *args, &block)
33
- end
34
- end
35
- end
29
+ def_delegators :all, *Collection::METHODS
36
30
 
37
31
  # Re-enables all proxies and disables all toxics.
38
32
  def self.reset
@@ -60,6 +54,11 @@ class Toxiproxy
60
54
  Collection.new(proxies)
61
55
  end
62
56
 
57
+ # Sets the toxiproxy host to use.
58
+ def self.host=(host)
59
+ @uri = host.is_a?(::URI) ? host : ::URI.parse(host)
60
+ end
61
+
63
62
  # Convenience method to create a proxy.
64
63
  def self.create(options)
65
64
  self.new(options).create
@@ -99,7 +98,7 @@ class Toxiproxy
99
98
  end
100
99
 
101
100
  def self.running?
102
- TCPSocket.new(URI.host, URI.port).close
101
+ TCPSocket.new(uri.host, uri.port).close
103
102
  true
104
103
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
105
104
  false
@@ -126,11 +125,9 @@ class Toxiproxy
126
125
  # failure, such as a data store becoming completely unavailable.
127
126
  def down(&block)
128
127
  disable
129
- begin
130
- yield
131
- ensure
132
- enable
133
- end
128
+ yield
129
+ ensure
130
+ enable
134
131
  end
135
132
 
136
133
  # Disables a Toxiproxy. This will drop all active connections and stop the proxy from listening.
@@ -207,8 +204,12 @@ class Toxiproxy
207
204
 
208
205
  private
209
206
 
207
+ def self.uri
208
+ @uri ||= ::URI.parse(DEFAULT_URI)
209
+ end
210
+
210
211
  def self.http
211
- @http ||= Net::HTTP.new(URI.host, URI.port)
212
+ @http ||= Net::HTTP.new(uri.host, uri.port)
212
213
  end
213
214
 
214
215
  def http
@@ -1,5 +1,3 @@
1
- require "forwardable"
2
-
3
1
  class Toxiproxy
4
2
  # ProxyCollection represents a set of proxies. This allows to easily perform
5
3
  # actions on every proxy in the collection.
@@ -1,3 +1,3 @@
1
1
  class Toxiproxy
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -24,6 +24,13 @@ class ToxiproxyTest < MiniTest::Unit::TestCase
24
24
  assert_equal "test_mysql_master", proxy.name
25
25
  end
26
26
 
27
+ def test_proxy_not_running_with_bad_host
28
+ Toxiproxy.host = 'http://0.0.0.0:12345'
29
+ assert !Toxiproxy.running?, 'toxiproxy should not be running'
30
+ ensure
31
+ Toxiproxy.host = Toxiproxy::DEFAULT_URI
32
+ end
33
+
27
34
  def test_enable_and_disable_proxy
28
35
  with_tcpserver do |port|
29
36
  proxy = Toxiproxy.create(upstream: "localhost:#{port}", name: "test_rubby_server")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toxiproxy
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
  - Simon Eskildsen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-07-02 00:00:00.000000000 Z
12
+ date: 2016-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler