docker-api 1.18.0 → 1.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -7
  3. data/lib/docker/exec.rb +8 -2
  4. data/lib/docker/util.rb +11 -1
  5. data/lib/docker/version.rb +2 -2
  6. data/spec/docker/container_spec.rb +6 -5
  7. data/spec/docker/exec_spec.rb +29 -61
  8. data/spec/docker/image_spec.rb +8 -4
  9. data/spec/docker_spec.rb +4 -3
  10. data/spec/fixtures/build_from_dir/Dockerfile +1 -1
  11. data/spec/vcr/Docker/_authenticate_/with_valid_credentials/logs_in_and_sets_the_creds.yml +10 -9
  12. data/spec/vcr/Docker/_info/returns_the_info_as_a_Hash.yml +15 -9
  13. data/spec/vcr/Docker/_validate_version/when_nothing_is_raised/validate_version_/.yml +15 -9
  14. data/spec/vcr/Docker/_version/returns_the_version_as_a_Hash.yml +10 -9
  15. data/spec/vcr/Docker_Container/_all/when_the_HTTP_response_is_a_200/materializes_each_Container_into_a_Docker_Container.yml +45 -34
  16. data/spec/vcr/Docker_Container/_attach/with_normal_sized_chunks/yields_each_chunk.yml +31 -30
  17. data/spec/vcr/Docker_Container/_attach/with_very_small_chunks/yields_each_chunk.yml +31 -30
  18. data/spec/vcr/Docker_Container/_changes/returns_the_changes_as_an_array.yml +45 -42
  19. data/spec/vcr/Docker_Container/_commit/creates_a_new_Image_from_the_Container_s_changes.yml +66 -35
  20. data/spec/vcr/Docker_Container/_copy/when_the_file_does_not_exist/raises_an_error.yml +37 -35
  21. data/spec/vcr/Docker_Container/_copy/when_the_input_is_a_directory/yields_each_chunk_of_the_tarred_directory.yml +45 -43
  22. data/spec/vcr/Docker_Container/_copy/when_the_input_is_a_file/yields_each_chunk_of_the_tarred_file.yml +44 -42
  23. data/spec/vcr/Docker_Container/_create/when_creating_a_container_named_bob/should_have_name_set_to_bob.yml +24 -22
  24. data/spec/vcr/Docker_Container/_create/when_the_Container_does_not_yet_exist/when_the_HTTP_request_returns_a_200/sets_the_id.yml +15 -14
  25. data/spec/vcr/Docker_Container/_delete/deletes_the_container.yml +24 -22
  26. data/spec/vcr/Docker_Container/_exec/when_detach_is_true/returns_the_Docker_Exec_object.yml +68 -39
  27. data/spec/vcr/Docker_Container/_exec/when_passed_a_block/streams_the_stdout/stderr_messages.yml +68 -38
  28. data/spec/vcr/Docker_Container/_exec/when_passed_only_a_command/returns_the_stdout/stderr_messages_and_exit_code.yml +183 -0
  29. data/spec/vcr/Docker_Container/_exec/when_stdin_object_is_passed/returns_the_stdout/stderr_messages.yml +26 -25
  30. data/spec/vcr/Docker_Container/_exec/when_tty_is_true/returns_the_raw_stdout/stderr_output.yml +68 -38
  31. data/spec/vcr/Docker_Container/_export/yields_each_chunk.yml +85 -92
  32. data/spec/vcr/Docker_Container/_get/when_the_HTTP_response_is_a_200/materializes_the_Container_into_a_Docker_Container.yml +24 -22
  33. data/spec/vcr/Docker_Container/_json/returns_the_description_as_a_Hash.yml +24 -22
  34. data/spec/vcr/Docker_Container/_kill/kills_the_container.yml +48 -43
  35. data/spec/vcr/Docker_Container/_kill/with_a_kill_signal/kills_the_container.yml +83 -69
  36. data/spec/vcr/Docker_Container/_logs/when_not_selecting_any_stream/raises_a_client_error.yml +47 -42
  37. data/spec/vcr/Docker_Container/_logs/when_selecting_stdout/returns_blank_logs.yml +20 -19
  38. data/spec/vcr/Docker_Container/_pause/pauses_the_container.yml +45 -43
  39. data/spec/vcr/Docker_Container/_restart/restarts_the_container.yml +73 -65
  40. data/spec/vcr/Docker_Container/_run/when_the_Container_s_command_does_not_return_status_code_of_0/raises_an_error.yml +29 -27
  41. data/spec/vcr/Docker_Container/_run/when_the_Container_s_command_returns_a_status_code_of_0/creates_a_new_container_to_run_the_specified_command.yml +114 -102
  42. data/spec/vcr/Docker_Container/_start/starts_the_container.yml +42 -37
  43. data/spec/vcr/Docker_Container/_stop/stops_the_container.yml +49 -44
  44. data/spec/vcr/Docker_Container/_streaming_logs/when_not_selecting_any_stream/raises_a_client_error.yml +47 -42
  45. data/spec/vcr/Docker_Container/_streaming_logs/when_selecting_stdout/returns_blank_logs.yml +20 -19
  46. data/spec/vcr/Docker_Container/_top/returns_the_top_commands_as_an_Array.yml +54 -51
  47. data/spec/vcr/Docker_Container/_unpause/unpauses_the_container.yml +45 -43
  48. data/spec/vcr/Docker_Container/_wait/waits_for_the_command_to_finish.yml +29 -27
  49. data/spec/vcr/Docker_Container/_wait/when_an_argument_is_given/sets_the_read_timeout_to_that_amount_of_time.yml +29 -27
  50. data/spec/vcr/Docker_Exec/_create/when_the_HTTP_request_returns_a_201/sets_the_id.yml +35 -33
  51. data/spec/vcr/Docker_Exec/_json/returns_the_description_as_a_Hash.yml +207 -0
  52. data/spec/vcr/Docker_Exec/_start_/when_detach_is_set_to_false/block_is_passed/attaches_to_the_stream.yml +68 -38
  53. data/spec/vcr/Docker_Exec/_start_/when_detach_is_set_to_false/returns_the_stdout_and_stderr_messages.yml +68 -38
  54. data/spec/vcr/Docker_Exec/_start_/when_detach_is_set_to_true/returns_empty_stdout/stderr_messages_with_exitcode.yml +180 -0
  55. data/spec/vcr/Docker_Exec/_start_/when_the_HTTP_request_returns_a_201/starts_the_exec_instance.yml +67 -38
  56. data/spec/vcr/Docker_Exec/_start_/when_the_command_has_already_run/raises_an_error.yml +67 -38
  57. data/spec/vcr/Docker_Image/_all/materializes_each_Image_into_a_Docker_Image.yml +67 -87
  58. data/spec/vcr/Docker_Image/_build/with_a_valid_Dockerfile/with_a_block_capturing_build_output/calls_the_block_and_passes_build_output.yml +9 -9
  59. data/spec/vcr/Docker_Image/_build/with_a_valid_Dockerfile/with_specifying_a_repo_in_the_query_parameters/builds_an_image_and_tags_it.yml +92 -107
  60. data/spec/vcr/Docker_Image/_build/with_a_valid_Dockerfile/without_query_parameters/builds_an_image.yml +9 -9
  61. data/spec/vcr/Docker_Image/_build/with_an_invalid_Dockerfile/throws_a_UnexpectedResponseError.yml +11 -9
  62. data/spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_a_block_capturing_build_output/calls_the_block_and_passes_build_output.yml +89 -38
  63. data/spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_credentials_passed/sends_X-Registry-Config_header.yml +89 -38
  64. data/spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_no_query_parameters/builds_the_image.yml +421 -51
  65. data/spec/vcr/Docker_Image/_build_from_dir/with_a_valid_Dockerfile/with_specifying_a_repo_in_the_query_parameters/builds_the_image_and_tags_it.yml +422 -140
  66. data/spec/vcr/Docker_Image/_create/when_the_Image_does_not_yet_exist_and_the_body_is_a_Hash/sets_the_id_and_sends_Docker_creds.yml +16 -16
  67. data/spec/vcr/Docker_Image/_create/with_a_block_capturing_create_output/calls_the_block_and_passes_build_output.yml +9 -7
  68. data/spec/vcr/Docker_Image/_exist_/when_the_image_does_exist/returns_true.yml +11 -9
  69. data/spec/vcr/Docker_Image/_get/when_the_image_does_exist/returns_the_new_image.yml +11 -9
  70. data/spec/vcr/Docker_Image/_history/returns_the_history_of_the_Image.yml +21 -18
  71. data/spec/vcr/Docker_Image/_import/when_the_argument_is_a_URI/when_the_URI_is_invalid/raises_an_error.yml +164 -35
  72. data/spec/vcr/Docker_Image/_import/when_the_argument_is_a_URI/when_the_URI_is_valid/returns_an_Image.yml +21 -23
  73. data/spec/vcr/Docker_Image/_import/when_the_file_does_exist/creates_the_Image.yml +15 -15
  74. data/spec/vcr/Docker_Image/_insert_local/when_a_direcory_is_passed/inserts_the_directory.yml +887 -840
  75. data/spec/vcr/Docker_Image/_insert_local/when_removing_intermediate_containers/creates_a_new_image.yml +76 -65
  76. data/spec/vcr/Docker_Image/_insert_local/when_removing_intermediate_containers/leave_no_intermediate_containers.yml +56 -48
  77. data/spec/vcr/Docker_Image/_insert_local/when_the_local_file_does_exist/creates_a_new_Image_that_has_that_file.yml +63 -61
  78. data/spec/vcr/Docker_Image/_insert_local/when_the_local_file_does_not_exist/raises_an_error.yml +9 -9
  79. data/spec/vcr/Docker_Image/_insert_local/when_there_are_multiple_files_passed/creates_a_new_Image_that_has_each_file.yml +69 -66
  80. data/spec/vcr/Docker_Image/_json/returns_additional_information_about_image_image.yml +19 -17
  81. data/spec/vcr/Docker_Image/_push/pushes_the_Image.yml +99 -113
  82. data/spec/vcr/Docker_Image/_push/streams_output_from_push.yml +100 -391
  83. data/spec/vcr/Docker_Image/_push/when_the_image_was_retrived_by_get/when_no_tag_is_specified/looks_up_the_first_repo_tag.yml +174 -708
  84. data/spec/vcr/Docker_Image/_push/when_there_are_no_credentials/still_pushes.yml +115 -110
  85. data/spec/vcr/Docker_Image/_refresh_/updates_the_info_hash.yml +77 -93
  86. data/spec/vcr/Docker_Image/_refresh_/with_an_explicit_connection/updates_using_the_provided_connection.yml +19 -17
  87. data/spec/vcr/Docker_Image/_remove/when_no_name_is_given/removes_the_Image.yml +581 -229
  88. data/spec/vcr/Docker_Image/_run/when_the_argument_is_a_String/splits_the_String_by_spaces_and_creates_a_new_Container.yml +52 -50
  89. data/spec/vcr/Docker_Image/_run/when_the_argument_is_an_Array/creates_a_new_Container.yml +42 -40
  90. data/spec/vcr/Docker_Image/_run/when_the_argument_is_nil/command_configured_in_image/should_normally_show_result_if_image_has_Cmd_configured.yml +52 -50
  91. data/spec/vcr/Docker_Image/_run/when_the_argument_is_nil/no_command_configured_in_image/should_raise_an_error_if_no_command_is_specified.yml +16 -15
  92. data/spec/vcr/Docker_Image/_save/calls_the_class_method.yml +42 -39
  93. data/spec/vcr/Docker_Image/_save/when_a_filename_is_specified/exports_tarball_of_image_to_specified_file.yml +51 -63
  94. data/spec/vcr/Docker_Image/_save/when_no_filename_is_specified/returns_raw_binary_data_as_string.yml +51 -63
  95. data/spec/vcr/Docker_Image/_search/materializes_each_Image_into_a_Docker_Image.yml +48 -209
  96. data/spec/vcr/Docker_Image/_tag/tags_the_image_with_the_repo_name.yml +22 -22
  97. metadata +8 -8
  98. data/spec/vcr/Docker_Container/_exec/when_passed_only_a_command/returns_the_stdout/stderr_messages.yml +0 -153
  99. data/spec/vcr/Docker_Exec/_resize/when_exec_instance_has_TTY_enabled/returns_a_200.yml +0 -155
  100. data/spec/vcr/Docker_Exec/_start_/when_detach_is_set_to_true/returns_empty_stdout_and_stderr_messages.yml +0 -151
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 195ce9ba3c1a2f7187272771e47f2486167fd318
4
- data.tar.gz: 65d04d49e572602bec544c168357558060b7aab9
3
+ metadata.gz: f014fbf8eec822892584240bab7d8afa3ba9005e
4
+ data.tar.gz: 904edd7019308e5c17cdfb326d1ef49fc9a161b8
5
5
  SHA512:
6
- metadata.gz: 19f5d443a6bf3febc0325be90b01c337dd11bf0ee008f61833b38c6ebd8ed23c363f6f29a6f6c29f171705463f11d91e4d33dc839fe0c899a8c96037d570d05e
7
- data.tar.gz: 73addede4a78867f54b06777f663bb8210b652992ac3be06ec6e5a1ecd13d4bb229aae38a281f2ab2962fc7c481e99f32169ca69d34aa11420cd44cc5e4722d9
6
+ metadata.gz: 1a25da3ac701b0dc000b4e04b694b04c82fc25f7f18be51202eb94e379eee8c17c5e948089e7ef6dd5e656a279df94eb27d9b9c6b6dd70837a77e5a8be9fc3c0
7
+ data.tar.gz: eb715f87b92d6acbcde4522463ba0a07f18b1f464fd1c8d75937240054911191dd515ab291544439e2081c1ccaa35a7b76c82b4c9fb5da8aa1ec5167e8a8f359
data/README.md CHANGED
@@ -333,31 +333,31 @@ container.commit
333
333
  container.run('pwd', 10)
334
334
  # => Docker::Image { :id => 4427be4199ac, :connection => Docker::Connection { :url => tcp://localhost, :options => {:port=>2375} } }
335
335
 
336
- # Run an Exec instance inside the container and capture its output
336
+ # Run an Exec instance inside the container and capture its output and exit status
337
337
  container.exec('date')
338
- # => [["Wed Nov 26 11:10:30 CST 2014\n"], []]
338
+ # => [["Wed Nov 26 11:10:30 CST 2014\n"], [], 0]
339
339
 
340
- # Launch an Exec instance without capturing its output
340
+ # Launch an Exec instance without capturing its output or status
341
341
  container.exec('./my_service', detach: true)
342
342
  # => Docker::Exec { :id => be4eaeb8d28a, :connection => Docker::Connection { :url => tcp://localhost, :options => {:port=>2375} } }
343
343
 
344
344
  # Parse the output of an Exec instance
345
345
  container.exec('find / -name *') { |stream, chunk| puts "#{stream}: #{chunk}" }
346
346
  stderr: 2013/10/30 17:16:24 Unable to locate find / -name *
347
- # => [[], ["2013/10/30 17:16:24 Unable to locate find / -name *\n"]]
347
+ # => [[], ["2013/10/30 17:16:24 Unable to locate find / -name *\n"], 1]
348
348
 
349
349
  # Run an Exec instance by grab only the STDOUT output
350
350
  container.exec('date', stderr: false)
351
- # => [["Wed Nov 26 11:10:30 CST 2014\n"], []]
351
+ # => [["Wed Nov 26 11:10:30 CST 2014\n"], [], 0]
352
352
 
353
353
  # Pass input to an Exec instance command via Stdin
354
354
  container.exec('cat', stdin: StringIO.new("foo\nbar\n"))
355
- # => [["foo\nbar\n"], []]
355
+ # => [["foo\nbar\n"], [], 0]
356
356
 
357
357
  # Get the raw stream of data from an Exec instance
358
358
  command = ["bash", "-c", "if [ -t 1 ]; then echo -n \"I'm a TTY!\"; fi"]
359
359
  container.exec(command, tty: true)
360
- # => [["I'm a TTY!"], []]
360
+ # => [["I'm a TTY!"], [], 0]
361
361
 
362
362
  # Delete a Container.
363
363
  container.delete(:force => true)
data/lib/docker/exec.rb CHANGED
@@ -25,6 +25,12 @@ class Docker::Exec
25
25
  new(conn, hash)
26
26
  end
27
27
 
28
+ # Get info about the Exec instance
29
+ #
30
+ def json
31
+ Docker::Util.parse_json(connection.get(path_for(:json), {}))
32
+ end
33
+
28
34
  # Start the Exec instance. The Exec instance is deleted after this so this
29
35
  # command can only be run once.
30
36
  #
@@ -35,7 +41,7 @@ class Docker::Exec
35
41
  # @option options [TrueClass, FalseClass] :tty (false) Whether to attach using
36
42
  # a pseudo-TTY.
37
43
  #
38
- # @return [Array, Array] The STDOUT and STDERR responses
44
+ # @return [Array, Array, Int] The STDOUT, STDERR and exit code
39
45
  def start!(options = {}, &block)
40
46
 
41
47
  # Parse the Options
@@ -62,7 +68,7 @@ class Docker::Exec
62
68
  end
63
69
 
64
70
  connection.post(path_for(:start), nil, excon_params)
65
- [msgs.stdout_messages, msgs.stderr_messages]
71
+ [msgs.stdout_messages, msgs.stderr_messages, self.json['ExitCode']]
66
72
  end
67
73
 
68
74
  # #start! performs the associated action and returns the output.
data/lib/docker/util.rb CHANGED
@@ -61,7 +61,7 @@ module Docker::Util
61
61
  IO.copy_stream stdin, socket
62
62
 
63
63
  debug "hijack: closing write end of hijacked socket"
64
- socket.close_write
64
+ close_write(socket)
65
65
  end
66
66
 
67
67
  debug "hijack: starting hijacked socket read thread"
@@ -84,6 +84,16 @@ module Docker::Util
84
84
  end
85
85
  end
86
86
 
87
+ def close_write(socket)
88
+ if socket.respond_to?(:close_write)
89
+ socket.close_write
90
+ elsif socket.respond_to?(:io)
91
+ socket.io.close_write
92
+ else
93
+ raise IOError, 'Cannot close socket'
94
+ end
95
+ end
96
+
87
97
  def parse_json(body)
88
98
  JSON.parse(body) unless body.nil? || body.empty? || (body == 'null')
89
99
  rescue JSON::ParserError => ex
@@ -1,7 +1,7 @@
1
1
  module Docker
2
2
  # The version of the docker-api gem.
3
- VERSION = '1.18.0'
3
+ VERSION = '1.19.0'
4
4
 
5
5
  # The version of the compatible Docker remote API.
6
- API_VERSION = '1.15'
6
+ API_VERSION = '1.16'
7
7
  end
@@ -296,8 +296,8 @@ describe Docker::Container do
296
296
  context 'when passed only a command' do
297
297
  let(:output) { subject.exec(['bash','-c','sleep 2; echo hello']) }
298
298
 
299
- it 'returns the stdout/stderr messages', :vcr do
300
- expect(output).to eq([["hello\n"], []])
299
+ it 'returns the stdout/stderr messages and exit code', :vcr do
300
+ expect(output).to eq([["hello\n"], [], 0])
301
301
  end
302
302
  end
303
303
 
@@ -325,7 +325,7 @@ describe Docker::Container do
325
325
 
326
326
  it 'returns the stdout/stderr messages', :vcr do
327
327
  skip 'HTTP socket hijacking not compatible with VCR'
328
- expect(output).to eq([["hello"],[]])
328
+ expect(output).to eq([["hello"],[],0])
329
329
  end
330
330
  end
331
331
 
@@ -337,7 +337,7 @@ describe Docker::Container do
337
337
  let(:output) { subject.exec(command, tty: true) }
338
338
 
339
339
  it 'returns the raw stdout/stderr output', :vcr do
340
- expect(output).to eq([["I'm a TTY!"], []])
340
+ expect(output).to eq([["I'm a TTY!"], [], 0])
341
341
  end
342
342
  end
343
343
  end
@@ -534,13 +534,14 @@ describe Docker::Container do
534
534
  }
535
535
  let(:image) { subject.commit }
536
536
 
537
- before { subject.start }
538
537
  after(:each) do
539
538
  subject.remove
540
539
  image.remove
541
540
  end
542
541
 
543
542
  it 'creates a new Image from the Container\'s changes', :vcr do
543
+ subject.tap(&:start).wait
544
+
544
545
  expect(image).to be_a Docker::Image
545
546
  expect(image.id).to_not be_nil
546
547
  end
@@ -1,6 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Docker::Exec do
4
+ let(:container) {
5
+ Docker::Container.create(
6
+ 'Cmd' => %w(sleep 300),
7
+ 'Image' => 'debian:wheezy'
8
+ ).start!
9
+ }
4
10
 
5
11
  describe '#to_s' do
6
12
  subject {
@@ -26,12 +32,6 @@ describe Docker::Exec do
26
32
  subject { described_class }
27
33
 
28
34
  context 'when the HTTP request returns a 201' do
29
- let(:container) {
30
- Docker::Container.create(
31
- 'Cmd' => %w[sleep 5],
32
- 'Image' => 'debian:wheezy'
33
- ).start!
34
- }
35
35
  let(:options) do
36
36
  {
37
37
  'AttachStdin' => false,
@@ -70,14 +70,26 @@ describe Docker::Exec do
70
70
  end
71
71
  end
72
72
 
73
- describe '#start!' do
74
- let(:container) {
75
- Docker::Container.create(
76
- 'Cmd' => %w[sleep 10],
77
- 'Image' => 'debian:wheezy'
78
- ).start!
73
+ describe '#json' do
74
+ subject {
75
+ described_class.create(
76
+ 'Container' => container.id,
77
+ 'Detach' => true,
78
+ 'Cmd' => %w[true]
79
+ )
79
80
  }
80
81
 
82
+ let(:description) { subject.json }
83
+ before { subject.start! }
84
+ after { container.kill!.remove }
85
+
86
+ it 'returns the description as a Hash', :vcr do
87
+ expect(description).to be_a Hash
88
+ expect(description['ID']).to start_with(subject.id)
89
+ end
90
+ end
91
+
92
+ describe '#start!' do
81
93
  context 'when the exec instance does not exist' do
82
94
  subject do
83
95
  described_class.send(:new, Docker.connection, 'id' => rand(10000).to_s)
@@ -100,16 +112,17 @@ describe Docker::Exec do
100
112
  after { container.kill!.remove }
101
113
 
102
114
  it 'returns the stdout and stderr messages', :vcr do
103
- expect(subject.start!).to eq([["hello\n"],[]])
115
+ expect(subject.start!).to eq([["hello\n"],[],0])
104
116
  end
105
117
 
106
118
  context 'block is passed' do
107
119
  it 'attaches to the stream', :vcr do
108
120
  chunk = nil
109
- subject.start! do |stream, c|
121
+ result = subject.start! do |stream, c|
110
122
  chunk ||= c
111
123
  end
112
124
  expect(chunk).to eq("hello\n")
125
+ expect(result).to eq([["hello\n"], [], 0])
113
126
  end
114
127
  end
115
128
  end
@@ -120,8 +133,8 @@ describe Docker::Exec do
120
133
  }
121
134
  after { container.kill!.remove }
122
135
 
123
- it 'returns empty stdout and stderr messages', :vcr do
124
- expect(subject.start!(:detach => true)).to eq([[],[]])
136
+ it 'returns empty stdout/stderr messages with exitcode', :vcr do
137
+ expect(subject.start!(:detach => true)).to eq([[],[], 0])
125
138
  end
126
139
  end
127
140
 
@@ -149,49 +162,4 @@ describe Docker::Exec do
149
162
  end
150
163
  end
151
164
  end
152
-
153
- describe '#resize' do
154
- let(:container) {
155
- Docker::Container.create(
156
- 'Cmd' => %w[sleep 20],
157
- 'Image' => 'debian:wheezy'
158
- ).start!
159
- }
160
-
161
- context 'when exec instance has TTY enabled' do
162
- let(:instance) do
163
- described_class.create(
164
- 'Container' => container.id,
165
- 'AttachStdin' => true,
166
- 'Tty' => true,
167
- 'Cmd' => %w[/bin/bash]
168
- )
169
- end
170
- after do
171
- container.kill!
172
- sleep 1
173
- container.remove
174
- end
175
-
176
- it 'returns a 200', :vcr do
177
- t = Thread.new do
178
- instance.start!(:tty => true)
179
- end
180
- sleep 1
181
- expect { instance.resize(:h => 10, :w => 30) }.not_to raise_error
182
- t.kill
183
- end
184
- end
185
-
186
- context 'when the exec instance does not exist' do
187
- subject do
188
- described_class.send(:new, Docker.connection, 'id' => rand(10000).to_s)
189
- end
190
-
191
- it 'raises an error', :vcr do
192
- skip 'The Docker API returns a 200 (docker/docker#9341)'
193
- expect { subject.resize }.to raise_error(Docker::Error::NotFoundError)
194
- end
195
- end
196
- end
197
165
  end
@@ -221,9 +221,10 @@ describe Docker::Image do
221
221
 
222
222
  context 'when the argument is a String', :vcr do
223
223
  let(:cmd) { 'ls /lib64/' }
224
- after { container.tap(&:wait).remove }
224
+ after { container.remove }
225
225
 
226
226
  it 'splits the String by spaces and creates a new Container' do
227
+ container.wait
227
228
  expect(output).to eq("ld-linux-x86-64.so.2\n")
228
229
  end
229
230
  end
@@ -249,9 +250,10 @@ describe Docker::Image do
249
250
 
250
251
  context "command configured in image" do
251
252
  let(:cmd) { 'pwd' }
252
- after { container.tap(&:wait).remove }
253
+ after { container.remove }
253
254
 
254
255
  it 'should normally show result if image has Cmd configured' do
256
+ container.wait
255
257
  expect(output).to eql "/\n"
256
258
  end
257
259
  end
@@ -562,8 +564,9 @@ describe Docker::Image do
562
564
  Docker::Container.create('Image' => image.id,
563
565
  'Cmd' => %w[cat /Dockerfile])
564
566
  end
565
- let(:output) { container.tap(&:start)
566
- .streaming_logs(stdout: true) }
567
+ let!(:output) {
568
+ container.tap(&:start).streaming_logs(stdout: true)
569
+ }
567
570
  after(:each) do
568
571
  container.tap(&:wait).remove
569
572
  image.remove(:noprune => true)
@@ -571,6 +574,7 @@ describe Docker::Image do
571
574
 
572
575
  context 'with no query parameters' do
573
576
  it 'builds the image', :vcr do
577
+ container.wait
574
578
  expect(output).to eq(docker_file.read)
575
579
  end
576
580
  end
data/spec/docker_spec.rb CHANGED
@@ -145,9 +145,10 @@ describe Docker do
145
145
 
146
146
  let(:info) { subject.info }
147
147
  let(:keys) do
148
- %w(Containers Debug Driver DriverStatus ExecutionDriver IPv4Forwarding
149
- Images IndexServerAddress InitPath InitSha1 KernelVersion MemoryLimit
150
- NEventsListener NFd NGoroutines OperatingSystem SwapLimit)
148
+ %w(Containers Debug DockerRootDir Driver DriverStatus ExecutionDriver ID
149
+ IPv4Forwarding Images IndexServerAddress InitPath InitSha1
150
+ KernelVersion Labels MemTotal MemoryLimit NCPU NEventsListener NFd
151
+ NGoroutines Name OperatingSystem SwapLimit)
151
152
  end
152
153
 
153
154
  it 'returns the info as a Hash', :vcr do
@@ -1,2 +1,2 @@
1
1
  FROM debian:wheezy
2
- ADD / /
2
+ ADD . /
@@ -2,13 +2,13 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: "<DOCKER_HOST>/v1.15/auth"
5
+ uri: <DOCKER_HOST>/v1.16/auth
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"username":"<USERNAME>","password":"<PASSWORD>","email":"<EMAIL>","serveraddress":"https://index.docker.io/v1/"}'
8
+ string: ! '{"username":"<USERNAME>","password":"<PASSWORD>","email":"<USERNAME>@gmail.com","serveraddress":"https://index.docker.io/v1/"}'
9
9
  headers:
10
10
  User-Agent:
11
- - Swipely/Docker-API 1.15.0
11
+ - Swipely/Docker-API 1.18.0
12
12
  Content-Type:
13
13
  - application/json
14
14
  response:
@@ -19,13 +19,14 @@ http_interactions:
19
19
  Content-Type:
20
20
  - application/json
21
21
  Date:
22
- - Mon, 01 Dec 2014 18:09:05 GMT
22
+ - Thu, 12 Feb 2015 00:56:24 GMT
23
23
  Content-Length:
24
24
  - '29'
25
25
  body:
26
- encoding: UTF-8
27
- string: |
28
- {"Status":"Login Succeeded"}
26
+ encoding: US-ASCII
27
+ string: ! '{"Status":"Login Succeeded"}
28
+
29
+ '
29
30
  http_version:
30
- recorded_at: Mon, 01 Dec 2014 18:09:05 GMT
31
- recorded_with: VCR 2.9.3
31
+ recorded_at: Thu, 12 Feb 2015 00:56:24 GMT
32
+ recorded_with: VCR 2.9.2
@@ -2,13 +2,13 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: "<DOCKER_HOST>/v1.15/info"
5
+ uri: <DOCKER_HOST>/v1.16/info
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
9
9
  headers:
10
10
  User-Agent:
11
- - Swipely/Docker-API 1.15.0
11
+ - Swipely/Docker-API 1.18.0
12
12
  Content-Type:
13
13
  - text/plain
14
14
  response:
@@ -21,13 +21,19 @@ http_interactions:
21
21
  Job-Name:
22
22
  - info
23
23
  Date:
24
- - Mon, 01 Dec 2014 18:09:04 GMT
24
+ - Thu, 12 Feb 2015 00:56:23 GMT
25
25
  Content-Length:
26
- - '490'
26
+ - '957'
27
27
  body:
28
- encoding: UTF-8
29
- string: |
30
- {"Containers":1,"Debug":1,"Driver":"aufs","DriverStatus":[["Root Dir","/mnt/sda1/var/lib/docker/aufs"],["Dirs","73"]],"ExecutionDriver":"native-0.2","IPv4Forwarding":1,"Images":71,"IndexServerAddress":"https://index.docker.io/v1/","InitPath":"/usr/local/bin/docker","InitSha1":"","KernelVersion":"3.16.7-tinycore64","MemoryLimit":1,"NEventsListener":0,"NFd":17,"NGoroutines":58,"OperatingSystem":"Boot2Docker 1.3.2 (TCL 5.4); master : 495c19a - Mon Nov 24 20:40:58 UTC 2014","SwapLimit":1}
28
+ encoding: US-ASCII
29
+ string: ! '{"Containers":2,"Debug":1,"DockerRootDir":"/var/lib/docker","Driver":"devicemapper","DriverStatus":[["Pool
30
+ Name","docker-8:1-1049879-pool"],["Pool Blocksize","65.54 kB"],["Data file","/var/lib/docker/devicemapper/devicemapper/data"],["Metadata
31
+ file","/var/lib/docker/devicemapper/devicemapper/metadata"],["Data Space Used","955.4
32
+ MB"],["Data Space Total","107.4 GB"],["Metadata Space Used","1.933 MB"],["Metadata
33
+ Space Total","2.147 GB"],["Library Version","1.02.92 (2014-11-28)"]],"ExecutionDriver":"native-0.2","ID":"6WA4:W5WW:QDFQ:BD5S:L2MJ:KXLK:UUYQ:AQ3U:4V62:XISI:YHFH:HUYG","IPv4Forwarding":1,"Images":27,"IndexServerAddress":"https://index.docker.io/v1/","InitPath":"/usr/lib/docker/dockerinit","InitSha1":"7f82b25cad873786f2c2d72d9ceecc1d46e0a65b","KernelVersion":"3.17.6-1-ARCH","Labels":null,"MemTotal":6255366144,"MemoryLimit":1,"NCPU":1,"NEventsListener":0,"NFd":19,"NGoroutines":45,"Name":"docker","OperatingSystem":"Arch
34
+ Linux","SwapLimit":0}
35
+
36
+ '
31
37
  http_version:
32
- recorded_at: Mon, 01 Dec 2014 18:09:04 GMT
33
- recorded_with: VCR 2.9.3
38
+ recorded_at: Thu, 12 Feb 2015 00:56:23 GMT
39
+ recorded_with: VCR 2.9.2