Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/kubeclient/test/test_watch.rb')
-rw-r--r--vendor/gems/kubeclient/test/test_watch.rb195
1 files changed, 195 insertions, 0 deletions
diff --git a/vendor/gems/kubeclient/test/test_watch.rb b/vendor/gems/kubeclient/test/test_watch.rb
new file mode 100644
index 00000000000..8d74008c851
--- /dev/null
+++ b/vendor/gems/kubeclient/test/test_watch.rb
@@ -0,0 +1,195 @@
+require_relative 'test_helper'
+
+# Watch entity tests
+class TestWatch < MiniTest::Test
+ def test_watch_pod_success
+ stub_core_api_list
+
+ expected = [
+ { 'type' => 'ADDED', 'resourceVersion' => '1389' },
+ { 'type' => 'MODIFIED', 'resourceVersion' => '1390' },
+ { 'type' => 'DELETED', 'resourceVersion' => '1398' }
+ ]
+
+ stub_request(:get, %r{/watch/pods})
+ .to_return(body: open_test_file('watch_stream.json'),
+ status: 200)
+
+ client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1')
+
+ client.watch_pods.to_enum.with_index do |notice, index|
+ assert_instance_of(Kubeclient::Resource, notice)
+ assert_equal(expected[index]['type'], notice.type)
+ assert_equal('Pod', notice.object.kind)
+ assert_equal('php', notice.object.metadata.name)
+ assert_equal(expected[index]['resourceVersion'],
+ notice.object.metadata.resourceVersion)
+ end
+ end
+
+ def test_watch_pod_block
+ stub_core_api_list
+ stub_request(:get, %r{/watch/pods})
+ .to_return(body: open_test_file('watch_stream.json'),
+ status: 200)
+
+ client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1')
+ yielded = []
+ client.watch_pods { |notice| yielded << notice.type }
+
+ assert_equal %w[ADDED MODIFIED DELETED], yielded
+ end
+
+ def test_watch_pod_raw
+ stub_core_api_list
+
+ stub_request(:get, %r{/watch/pods}).to_return(
+ body: open_test_file('watch_stream.json'),
+ status: 200
+ )
+
+ client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1')
+
+ got = nil
+ client.watch_pods(as: :raw).each { |notice| got = notice }
+ assert_match(/\A{"type":"DELETED"/, got)
+ end
+
+ def test_watch_pod_failure
+ stub_core_api_list
+ stub_request(:get, %r{/watch/pods}).to_return(status: 404)
+
+ client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1')
+ assert_raises(Kubeclient::HttpError) do
+ client.watch_pods.each do
+ end
+ end
+ end
+
+ def test_watch_pod_follow_redirect
+ stub_core_api_list
+
+ redirect = 'http://localhost:1234/api/v1/watch/pods'
+ stub_request(:get, %r{/watch/pods})
+ .to_return(status: 302, headers: { location: redirect })
+
+ stub_request(:get, redirect).to_return(
+ body: open_test_file('watch_stream.json'),
+ status: 200
+ )
+
+ client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1')
+
+ got = nil
+ client.watch_pods.each { |notice| got = notice }
+ assert_equal('DELETED', got.type)
+ end
+
+ def test_watch_pod_max_redirect
+ stub_core_api_list
+
+ redirect = 'http://localhost:1234/api/v1/watcher/pods'
+ stub_request(:get, %r{/watch/pods})
+ .to_return(status: 302, headers: { location: redirect })
+
+ stub_request(:get, redirect).to_return(
+ body: open_test_file('watch_stream.json'),
+ status: 200
+ )
+
+ client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1', http_max_redirects: 0)
+
+ assert_raises(Kubeclient::HttpError) do
+ client.watch_pods.each do
+ end
+ end
+ end
+
+ # Ensure that WatchStream respects a format that's not JSON
+ def test_watch_stream_text
+ url = 'http://www.example.com/foobar'
+ expected_lines = open_test_file('pod_log.txt').read.split("\n")
+
+ stub_request(:get, url)
+ .to_return(body: open_test_file('pod_log.txt'),
+ status: 200)
+
+ stream = Kubeclient::Common::WatchStream.new(URI.parse(url), {}, formatter: ->(v) { v })
+ stream.to_enum.with_index do |line, index|
+ assert_instance_of(String, line)
+ assert_equal(expected_lines[index], line)
+ end
+ end
+
+ def test_watch_with_resource_version
+ api_host = 'http://localhost:8080/api'
+ version = '1995'
+ stub_core_api_list
+ stub_request(:get, %r{.*\/watch/events})
+ .to_return(body: open_test_file('watch_stream.json'),
+ status: 200)
+
+ client = Kubeclient::Client.new(api_host, 'v1')
+ results = client.watch_events(version).to_enum
+
+ assert_equal(3, results.count)
+ assert_requested(:get,
+ "#{api_host}/v1/watch/events?resourceVersion=#{version}",
+ times: 1)
+ end
+
+ def test_watch_with_label_selector
+ api_host = 'http://localhost:8080/api'
+ selector = 'name=redis-master'
+
+ stub_core_api_list
+ stub_request(:get, %r{.*\/watch/events})
+ .to_return(body: open_test_file('watch_stream.json'),
+ status: 200)
+
+ client = Kubeclient::Client.new(api_host, 'v1')
+ results = client.watch_events(label_selector: selector).to_enum
+
+ assert_equal(3, results.count)
+ assert_requested(:get,
+ "#{api_host}/v1/watch/events?labelSelector=#{selector}",
+ times: 1)
+ end
+
+ def test_watch_with_field_selector
+ api_host = 'http://localhost:8080/api'
+ selector = 'involvedObject.kind=Pod'
+
+ stub_core_api_list
+ stub_request(:get, %r{.*\/watch/events})
+ .to_return(body: open_test_file('watch_stream.json'),
+ status: 200)
+
+ client = Kubeclient::Client.new(api_host, 'v1')
+ results = client.watch_events(field_selector: selector).to_enum
+
+ assert_equal(3, results.count)
+ assert_requested(:get,
+ "#{api_host}/v1/watch/events?fieldSelector=#{selector}",
+ times: 1)
+ end
+
+ def test_watch_with_finish_and_ebadf
+ api_host = 'http://localhost:8080/api'
+
+ stub_core_api_list
+ stub_request(:get, %r{.*\/watch/events})
+ .to_return(body: open_test_file('watch_stream.json'), status: 200)
+
+ client = Kubeclient::Client.new(api_host, 'v1')
+ watcher = client.watch_events
+
+ # explodes when StandardError is not caught
+ watcher.each do
+ watcher.finish
+ raise StandardError
+ end
+
+ assert_requested(:get, "#{api_host}/v1/watch/events", times: 1)
+ end
+end