toxiproxy 1.0.3 → 2.0.2

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: dd7714ade2b3e653fabba43c36dc025fd36a6377
4
- data.tar.gz: bc0fa5de828b70a14da8797ce672245bfd91c760
2
+ SHA256:
3
+ metadata.gz: 98c1cbde340b90f1da3d81bf0119ec97a161ffa3815eb06982dd88d807fcce18
4
+ data.tar.gz: 3a8e7e33d8add55ba5ab6fd77d1914faae65cefd4df3789c8dd3e2d5cf529b62
5
5
  SHA512:
6
- metadata.gz: 0247200fb5ee43f9d46d3a73af053ba4b5bddd5ce238eec0d8cc6e32415363f14c6053abafc52b42d46bddc51ff0f6c74d0a0b4a86261e43c58ffc44d8f62ffe
7
- data.tar.gz: c08a860ae38e8e375478df95d891b351614bf766dca25d582a076f8a55b871a1b2630d5cbe2678555f2a9b17d532ec8dcdb4cf22fafff57dd30b3d12a07eb67e
6
+ metadata.gz: 72d9c8ace67f5371eba624490da0933d9b6e6eeb5162f2963a8fb9ad581e45a8efc4ce243a28a042343abeede16897e37ba0e25674c10cd92a94d52facddf931
7
+ data.tar.gz: 717ac41a5767aecd2a77df7e355180f30622e0628dbed7c7662a931ef0a3a0280119e1f098f8b1ceb4f30995ea702136588b02b5b4ab82408b2bee0abf0bdbe0
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # toxiproxy-ruby
2
2
 
3
- `toxiproxy-ruby` `1.x` (latest) is compatible with the Toxiproxy `2.x` series.
3
+ [![Gem Version](https://badge.fury.io/rb/toxiproxy.svg)](https://badge.fury.io/rb/toxiproxy)
4
+ [![Test](https://github.com/Shopify/toxiproxy-ruby/actions/workflows/test.yml/badge.svg)](https://github.com/Shopify/toxiproxy-ruby/actions/workflows/test.yml)
5
+
6
+ `toxiproxy-ruby` `>= 1.x` is compatible with the Toxiproxy `2.x` series.
4
7
  `toxiproxy-ruby` `0.x` is compatible with the Toxiproxy `1.x` series.
5
8
 
6
9
  [Toxiproxy](https://github.com/shopify/toxiproxy) is a proxy to simulate network
@@ -9,8 +12,8 @@ ensure your application behaves appropriately under harsh conditions. Before you
9
12
  can use the Ruby library, you need to read the [Usage section of the Toxiproxy
10
13
  README](https://github.com/shopify/toxiproxy#usage).
11
14
 
12
- ```
13
- gem install toxiproxy
15
+ ```shell
16
+ $ gem install toxiproxy
14
17
  ```
15
18
 
16
19
  Make sure the Toxiproxy server is already running.
@@ -1,3 +1,3 @@
1
1
  class Toxiproxy
2
- VERSION = "1.0.3"
2
+ VERSION = "2.0.2"
3
3
  end
data/lib/toxiproxy.rb CHANGED
@@ -68,6 +68,8 @@ class Toxiproxy
68
68
  # Sets the toxiproxy host to use.
69
69
  def self.host=(host)
70
70
  @uri = host.is_a?(::URI) ? host : ::URI.parse(host)
71
+ reset_http_client!
72
+ @uri
71
73
  end
72
74
 
73
75
  # Convenience method to create a proxy.
@@ -98,14 +100,23 @@ class Toxiproxy
98
100
  def self.populate(*proxies)
99
101
  proxies = proxies.first if proxies.first.is_a?(Array)
100
102
 
101
- proxies.map { |proxy|
102
- existing = find_by_name(proxy[:name])
103
- if existing && (existing.upstream != proxy[:upstream] || existing.listen != proxy[:listen])
104
- existing.destroy
105
- existing = false
106
- end
107
- self.create(proxy) unless existing
108
- }.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)
109
120
  end
110
121
 
111
122
  def self.running?
@@ -214,6 +225,12 @@ class Toxiproxy
214
225
  }
215
226
  end
216
227
 
228
+ @http = nil
229
+ def self.reset_http_client!
230
+ @http.finish if @http&.started?
231
+ @http = nil
232
+ end
233
+
217
234
  private
218
235
 
219
236
  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.3
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Eskildsen
@@ -9,90 +9,32 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-07-27 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-09-02 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
+ source_code_uri: https://github.com/Shopify/toxiproxy-ruby
35
+ changelog_uri: https://github.com/Shopify/toxiproxy-ruby/blob/master/CHANGELOG.md
36
+ documentation_uri: https://github.com/Shopify/toxiproxy-ruby
37
+ allowed_push_host: https://rubygems.org
96
38
  post_install_message:
97
39
  rdoc_options: []
98
40
  require_paths:
@@ -108,9 +50,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
50
  - !ruby/object:Gem::Version
109
51
  version: '0'
110
52
  requirements: []
111
- rubyforge_project:
112
- rubygems_version: 2.6.14
53
+ rubygems_version: 3.3.3
113
54
  signing_key:
114
55
  specification_version: 4
115
56
  summary: Ruby library for Toxiproxy
116
- test_files: []
57
+ test_files:
58
+ - test/test_helper.rb
59
+ - 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.1.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