diff options
Diffstat (limited to 'vendor/gems/kubeclient/test/test_watch.rb')
-rw-r--r-- | vendor/gems/kubeclient/test/test_watch.rb | 195 |
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 |