toxiproxy 1.0.2 → 2.0.1

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
- SHA1:
3
- metadata.gz: 2c94b91428b8f1e4b982ae184a2e022748eb7902
4
- data.tar.gz: abe80ecccc2bb359a74f2614403316741a208c72
2
+ SHA256:
3
+ metadata.gz: d135ce7e35507ad08017ae28db7f7543f9c0d0a29cd32042c9c61d072bee5eee
4
+ data.tar.gz: 8db56acdadcac8ac84b5b1be31a235cd7715422ff4cee1a36e3832eb983355f8
5
5
  SHA512:
6
- metadata.gz: 84344059667bddf413e3521cb7cdd35ee99fdda1e9d80f50311ce5916dc5dfcf8117420fe7b89451df799905d731f8d7b67193bc8c83106871a274e830a5316b
7
- data.tar.gz: bb9a1bec25d40ae9062823a72fd92b4a4e21ec9ffd869e9bbc0a6d3439324addaeeae0b29d59caeed7c9dde0cf8f7e0fd87bf6736c31f178edca510a2285885a
6
+ metadata.gz: adee5993b439b3227b67ec4ca28fecdb8c7194d9b640e369df77f60a754d42bf20d758eaa8ca2a11a553451d7bd63654d14b0a03781fcc07751a5f5e947d524b
7
+ data.tar.gz: 1d69a13027507acc7791ac0904e70b1a02bd6f5bd4bad55e2724b6cc6e0d9f19e0e949c05d49f5ef7313e80193cfe898c3b2950c5124c41277412254b5895144
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # toxiproxy-ruby
2
2
 
3
- `toxiproxy-ruby` `1.x` (latest) is compatible with the Toxiproxy `2.x` series.
3
+ `toxiproxy-ruby` `>= 1.x` is compatible with the Toxiproxy `2.x` series.
4
4
  `toxiproxy-ruby` `0.x` is compatible with the Toxiproxy `1.x` series.
5
5
 
6
6
  [Toxiproxy](https://github.com/shopify/toxiproxy) is a proxy to simulate network
@@ -1,6 +1,6 @@
1
1
  class Toxiproxy
2
2
  class Toxic
3
- attr_reader :name, :type, :attributes, :stream, :proxy
3
+ attr_reader :name, :type, :stream, :proxy
4
4
  attr_accessor :attributes, :toxicity
5
5
 
6
6
  def initialize(attrs)
@@ -15,6 +15,7 @@ class Toxiproxy
15
15
 
16
16
  def save
17
17
  request = Net::HTTP::Post.new("/proxies/#{proxy.name}/toxics")
18
+ request["Content-Type"] = "application/json"
18
19
 
19
20
  request.body = as_json
20
21
 
@@ -1,3 +1,3 @@
1
1
  class Toxiproxy
2
- VERSION = "1.0.2"
2
+ VERSION = "2.0.1"
3
3
  end
data/lib/toxiproxy.rb CHANGED
@@ -31,6 +31,8 @@ class Toxiproxy
31
31
  # Re-enables all proxies and disables all toxics.
32
32
  def self.reset
33
33
  request = Net::HTTP::Post.new("/reset")
34
+ request["Content-Type"] = "application/json"
35
+
34
36
  response = http_request(request)
35
37
  assert_response(response)
36
38
  self
@@ -66,6 +68,8 @@ class Toxiproxy
66
68
  # Sets the toxiproxy host to use.
67
69
  def self.host=(host)
68
70
  @uri = host.is_a?(::URI) ? host : ::URI.parse(host)
71
+ reset_http_client!
72
+ @uri
69
73
  end
70
74
 
71
75
  # Convenience method to create a proxy.
@@ -96,14 +100,23 @@ class Toxiproxy
96
100
  def self.populate(*proxies)
97
101
  proxies = proxies.first if proxies.first.is_a?(Array)
98
102
 
99
- proxies.map { |proxy|
100
- existing = find_by_name(proxy[:name])
101
- if existing && (existing.upstream != proxy[:upstream] || existing.listen != proxy[:listen])
102
- existing.destroy
103
- existing = false
104
- end
105
- self.create(proxy) unless existing
106
- }.compact
103
+ request = Net::HTTP::Post.new("/populate")
104
+ request.body = proxies.to_json
105
+ request["Content-Type"] = "application/json"
106
+
107
+ response = http_request(request)
108
+ assert_response(response)
109
+
110
+ proxies = JSON.parse(response.body).fetch('proxies', []).map do |attrs|
111
+ self.new({
112
+ upstream: attrs["upstream"],
113
+ listen: attrs["listen"],
114
+ name: attrs["name"],
115
+ enabled: attrs["enabled"]
116
+ })
117
+ end
118
+
119
+ ProxyCollection.new(proxies)
107
120
  end
108
121
 
109
122
  def self.running?
@@ -144,6 +157,7 @@ class Toxiproxy
144
157
  # Disables a Toxiproxy. This will drop all active connections and stop the proxy from listening.
145
158
  def disable
146
159
  request = Net::HTTP::Post.new("/proxies/#{name}")
160
+ request["Content-Type"] = "application/json"
147
161
 
148
162
  hash = {enabled: false}
149
163
  request.body = hash.to_json
@@ -156,6 +170,7 @@ class Toxiproxy
156
170
  # Enables a Toxiproxy. This will cause the proxy to start listening again.
157
171
  def enable
158
172
  request = Net::HTTP::Post.new("/proxies/#{name}")
173
+ request["Content-Type"] = "application/json"
159
174
 
160
175
  hash = {enabled: true}
161
176
  request.body = hash.to_json
@@ -170,6 +185,7 @@ class Toxiproxy
170
185
  # of this connection.
171
186
  def create
172
187
  request = Net::HTTP::Post.new("/proxies")
188
+ request["Content-Type"] = "application/json"
173
189
 
174
190
  hash = {upstream: upstream, name: name, listen: listen, enabled: enabled}
175
191
  request.body = hash.to_json
@@ -209,6 +225,15 @@ class Toxiproxy
209
225
  }
210
226
  end
211
227
 
228
+ def self.reset_http_client!
229
+ if defined? @http
230
+ @http.finish() if @http && @http.started?
231
+ @http = nil
232
+ end
233
+
234
+ @http
235
+ end
236
+
212
237
  private
213
238
 
214
239
  def self.http_request(request)
@@ -358,26 +358,31 @@ class ToxiproxyTest < MiniTest::Unit::TestCase
358
358
  end
359
359
 
360
360
  def test_populate_creates_proxies_update_upstream
361
- proxies = [{
362
- name: "test_toxiproxy_populate1",
361
+ proxy_name = "test_toxiproxy_populate1"
362
+ proxies_config = [{
363
+ name: proxy_name,
363
364
  upstream: "localhost:3306",
364
365
  listen: "localhost:22222",
365
366
  },
366
367
  ]
367
368
 
368
- proxies = Toxiproxy.populate(proxies)
369
+ proxies = Toxiproxy.populate(proxies_config)
369
370
 
370
- proxies = [{
371
- name: "test_toxiproxy_populate1",
371
+ proxies_config = [{
372
+ name: proxy_name,
372
373
  upstream: "localhost:3307",
373
374
  listen: "localhost:22222",
374
375
  },
375
376
  ]
376
377
 
377
- proxies2 = Toxiproxy.populate(proxies)
378
+ proxies2 = Toxiproxy.populate(proxies_config)
379
+
380
+ refute_equal proxies.find(name: proxy_name).first.upstream,
381
+ proxies2.find(name: proxy_name).first.upstream
378
382
 
379
- assert_equal proxies.first[:upstream], proxies2.first.upstream
380
- assert_proxy_available(proxies2.first)
383
+ proxies2.each do |proxy|
384
+ assert_proxy_available(proxy)
385
+ end
381
386
  end
382
387
 
383
388
  def test_running_helper
@@ -448,6 +453,15 @@ class ToxiproxyTest < MiniTest::Unit::TestCase
448
453
  end
449
454
  end
450
455
 
456
+ def test_invalidate_cache_http_on_host
457
+ old_value = Toxiproxy.uri
458
+ assert_equal 8474, Toxiproxy.http.port
459
+ Toxiproxy.host = "http://127.0.0.1:8475"
460
+ assert_equal 8475, Toxiproxy.http.port
461
+ ensure
462
+ Toxiproxy.host = old_value
463
+ end
464
+
451
465
  private
452
466
 
453
467
  def with_webmock_enabled
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: 1.0.2
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Eskildsen
@@ -9,90 +9,30 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-03-14 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: bundler
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '1.3'
21
- type: :development
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
26
- - !ruby/object:Gem::Version
27
- version: '1.3'
28
- - !ruby/object:Gem::Dependency
29
- name: minitest
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '0'
42
- - !ruby/object:Gem::Dependency
43
- name: rake
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: '0'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: webmock
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: '0'
12
+ date: 2022-03-15 00:00:00.000000000 Z
13
+ dependencies: []
70
14
  description: A Ruby library for controlling Toxiproxy. Can be used in resiliency testing.
71
- email: simon.eskildsen@shopify.com
15
+ email: opensource@shopify.com
72
16
  executables: []
73
17
  extensions: []
74
18
  extra_rdoc_files: []
75
19
  files:
76
- - ".gitignore"
77
- - Gemfile
78
20
  - LICENSE
79
21
  - README.md
80
- - Rakefile
81
- - bin/start-toxiproxy.sh
82
- - circle.yml
83
22
  - lib/toxiproxy.rb
84
23
  - lib/toxiproxy/proxy_collection.rb
85
24
  - lib/toxiproxy/toxic.rb
86
25
  - lib/toxiproxy/toxic_collection.rb
87
26
  - lib/toxiproxy/version.rb
88
- - shipit.rubygems.yml
89
27
  - test/test_helper.rb
90
28
  - test/toxiproxy_test.rb
91
- - toxiproxy.gemspec
92
29
  homepage: https://github.com/Shopify/toxiproxy
93
30
  licenses:
94
31
  - MIT
95
- metadata: {}
32
+ metadata:
33
+ homepage_uri: https://github.com/Shopify/toxiproxy
34
+ documentation_uri: https://github.com/Shopify/toxiproxy-ruby
35
+ allowed_push_host: https://rubygems.org
96
36
  post_install_message:
97
37
  rdoc_options: []
98
38
  require_paths:
@@ -108,9 +48,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
48
  - !ruby/object:Gem::Version
109
49
  version: '0'
110
50
  requirements: []
111
- rubyforge_project:
112
- rubygems_version: 2.5.2
51
+ rubygems_version: 3.2.20
113
52
  signing_key:
114
53
  specification_version: 4
115
54
  summary: Ruby library for Toxiproxy
116
- test_files: []
55
+ test_files:
56
+ - test/test_helper.rb
57
+ - test/toxiproxy_test.rb
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- vendor/
2
- .bundle
3
- Gemfile.lock
4
- *.gem
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source "https://rubygems.org"
2
- gemspec
3
-
data/Rakefile DELETED
@@ -1,12 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- desc 'Default: run unit tests.'
5
- task :default => :test
6
-
7
- Rake::TestTask.new(:test) do |t|
8
- t.libs << 'lib'
9
- t.libs << 'test'
10
- t.pattern = 'test/*_test.rb'
11
- t.verbose = true
12
- end
@@ -1,17 +0,0 @@
1
- #!/bin/bash -e
2
-
3
- VERSION='v2.0.0'
4
- TOXIPROXY_LOG_DIR=${CIRCLE_ARTIFACTS:-'/tmp'}
5
-
6
- if [[ "$OSTYPE" == "linux"* ]]; then
7
- DOWNLOAD_TYPE="linux-amd64"
8
- elif [[ "$OSTYPE" == "darwin"* ]]; then
9
- DOWNLOAD_TYPE="darwin-amd64"
10
- fi
11
-
12
- echo "[dowload toxiproxy for $DOWNLOAD_TYPE]"
13
- curl --silent -L https://github.com/Shopify/toxiproxy/releases/download/$VERSION/toxiproxy-server-$DOWNLOAD_TYPE -o ./bin/toxiproxy-server
14
-
15
- echo "[start toxiproxy]"
16
- chmod +x ./bin/toxiproxy-server
17
- nohup bash -c "./bin/toxiproxy-server > ${TOXIPROXY_LOG_DIR}/toxiproxy.log 2>&1 &"
data/circle.yml DELETED
@@ -1,11 +0,0 @@
1
- dependencies:
2
- override:
3
- - bundle install
4
- - ./bin/start-toxiproxy.sh
5
- test:
6
- override:
7
- - bundle exec rake test
8
-
9
- machine:
10
- ruby:
11
- version: 2.4.0
data/shipit.rubygems.yml DELETED
@@ -1,2 +0,0 @@
1
- fetch:
2
- - fetch-gem-version toxiproxy Shopify/toxiproxy-ruby
data/toxiproxy.gemspec DELETED
@@ -1,21 +0,0 @@
1
- require File.expand_path("../lib/toxiproxy/version", __FILE__)
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = "toxiproxy"
5
- spec.version = Toxiproxy::VERSION
6
- spec.authors = ["Simon Eskildsen", "Jacob Wirth"]
7
- spec.email = "simon.eskildsen@shopify.com"
8
- spec.summary = "Ruby library for Toxiproxy"
9
- spec.description = "A Ruby library for controlling Toxiproxy. Can be used in resiliency testing."
10
- spec.homepage = "https://github.com/Shopify/toxiproxy"
11
- spec.license = "MIT"
12
-
13
- spec.files = `git ls-files`.split("\n")
14
- spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
- spec.require_paths = ["lib"]
16
-
17
- spec.add_development_dependency "bundler", "~> 1.3"
18
- spec.add_development_dependency "minitest"
19
- spec.add_development_dependency "rake"
20
- spec.add_development_dependency "webmock"
21
- end