uricp 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  .DS_Store
2
2
  results.html
3
+ coverage
3
4
  pkg
4
5
  html
5
- Gemfile.lock
6
6
  *.swp
7
+ Dockerfile
@@ -0,0 +1,39 @@
1
+ FROM centos:6.6
2
+ MAINTAINER support@brightbox.co.uk
3
+
4
+ RUN yum update -y && yum -y install \
5
+ epel-release \
6
+ gcc \
7
+ git \
8
+ make \
9
+ qemu-img \
10
+ ruby-devel \
11
+ rubygems
12
+
13
+ RUN yum update -y && yum -y install \
14
+ python-setuptools \
15
+ python-requests \
16
+ python-devel \
17
+ python-simplejson \
18
+ python-futures \
19
+ lz4
20
+
21
+ RUN easy_install pip
22
+ RUN pip install --upgrade setuptools
23
+ RUN pip install python-swiftclient
24
+
25
+ RUN echo "gem: --no-ri --no-rdoc" >> "$HOME/.gemrc"
26
+ RUN gem install bundler
27
+
28
+ RUN mkdir /app
29
+ WORKDIR /app
30
+
31
+ COPY Gemfile /app/Gemfile
32
+ COPY Gemfile.lock /app/Gemfile.lock
33
+ COPY uricp.gemspec /app/uricp.gemspec
34
+ COPY lib/uricp/version.rb /app/lib/uricp/version.rb
35
+ RUN bundle install --deployment
36
+
37
+ COPY . /app
38
+
39
+ CMD bundle exec rake features:old_qemu
@@ -0,0 +1,39 @@
1
+ FROM centos:7
2
+ MAINTAINER support@brightbox.co.uk
3
+
4
+ RUN yum update -y && yum -y install \
5
+ epel-release \
6
+ gcc \
7
+ make \
8
+ git \
9
+ qemu-img \
10
+ ruby-devel \
11
+ rubygems \
12
+
13
+ RUN yum update -y && yum -y install \
14
+ python-setuptools \
15
+ python-requests \
16
+ python-devel \
17
+ python-simplejson \
18
+ python-futures \
19
+ lz4
20
+
21
+ RUN easy_install pip
22
+ RUN pip install --upgrade setuptools
23
+ RUN pip install python-swiftclient
24
+
25
+ RUN echo "gem: --no-ri --no-rdoc" >> "$HOME/.gemrc"
26
+ RUN gem install bundler
27
+
28
+ RUN mkdir /app
29
+ WORKDIR /app
30
+
31
+ COPY Gemfile /app/Gemfile
32
+ COPY Gemfile.lock /app/Gemfile.lock
33
+ COPY uricp.gemspec /app/uricp.gemspec
34
+ COPY lib/uricp/version.rb /app/lib/uricp/version.rb
35
+ RUN bundle install --deployment
36
+
37
+ COPY . /app
38
+
39
+ CMD bundle exec rake features:new_qemu
@@ -0,0 +1,32 @@
1
+ FROM ubuntu:trusty
2
+ MAINTAINER support@brightbox.co.uk
3
+
4
+ RUN apt-get update && apt-get install -y -qq software-properties-common
5
+
6
+ RUN apt-add-repository ppa:brightbox/ruby-ng
7
+
8
+ RUN apt-get update && apt-get install -y -qq \
9
+ build-essential \
10
+ git \
11
+ qemu-utils \
12
+ liblz4-tool \
13
+ curl \
14
+ ruby1.9.3 \
15
+ ruby-dev \
16
+ python-swiftclient
17
+
18
+ RUN echo "gem: --no-ri --no-rdoc" >> "$HOME/.gemrc"
19
+ RUN gem install bundler
20
+
21
+ RUN mkdir /app
22
+ WORKDIR /app
23
+
24
+ COPY Gemfile /app/Gemfile
25
+ COPY Gemfile.lock /app/Gemfile.lock
26
+ COPY uricp.gemspec /app/uricp.gemspec
27
+ COPY lib/uricp/version.rb /app/lib/uricp/version.rb
28
+ RUN bundle install --deployment
29
+
30
+ COPY . /app
31
+
32
+ CMD bundle exec rake features:new_qemu
data/Gemfile.lock ADDED
@@ -0,0 +1,62 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ uricp (0.0.7)
5
+ filesize (= 0.0.2)
6
+ methadone (~> 1.8.0)
7
+ open4 (~> 1.3.0)
8
+ sendfile (~> 1.2.0)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ aruba (0.6.2)
14
+ childprocess (>= 0.3.6)
15
+ cucumber (>= 1.1.1)
16
+ rspec-expectations (>= 2.7.0)
17
+ builder (3.2.2)
18
+ childprocess (0.5.5)
19
+ ffi (~> 1.0, >= 1.0.11)
20
+ cucumber (1.3.19)
21
+ builder (>= 2.1.2)
22
+ diff-lcs (>= 1.1.3)
23
+ gherkin (~> 2.12)
24
+ multi_json (>= 1.7.5, < 2.0)
25
+ multi_test (>= 0.1.2)
26
+ diff-lcs (1.2.5)
27
+ ffi (1.9.8)
28
+ filesize (0.0.2)
29
+ gherkin (2.12.2)
30
+ multi_json (~> 1.3)
31
+ inifile (1.1.0)
32
+ json (1.8.2)
33
+ methadone (1.8.0)
34
+ bundler
35
+ multi_json (1.11.0)
36
+ multi_test (0.1.2)
37
+ open4 (1.3.4)
38
+ rake (10.4.2)
39
+ rdoc (4.2.0)
40
+ json (~> 1.4)
41
+ rspec (2.99.0)
42
+ rspec-core (~> 2.99.0)
43
+ rspec-expectations (~> 2.99.0)
44
+ rspec-mocks (~> 2.99.0)
45
+ rspec-core (2.99.2)
46
+ rspec-expectations (2.99.2)
47
+ diff-lcs (>= 1.1.3, < 2.0)
48
+ rspec-mocks (2.99.3)
49
+ sendfile (1.2.2)
50
+
51
+ PLATFORMS
52
+ ruby
53
+
54
+ DEPENDENCIES
55
+ aruba
56
+ bundler (~> 1.7)
57
+ cucumber (~> 1.3)
58
+ inifile (~> 1.1)
59
+ rake
60
+ rdoc
61
+ rspec (~> 2.99)
62
+ uricp!
data/Rakefile CHANGED
@@ -50,9 +50,17 @@ end
50
50
 
51
51
  CUKE_RESULTS = 'results.html'
52
52
  CLEAN << CUKE_RESULTS
53
- Cucumber::Rake::Task.new(:features) do |t|
54
- t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
55
- t.fork = false
53
+ namespace(:features) do
54
+ Cucumber::Rake::Task.new(:new_qemu) do |t|
55
+ t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
56
+ t.fork = false
57
+ t.profile = 'new-qemu-image'
58
+ end
59
+ Cucumber::Rake::Task.new(:old_qemu) do |t|
60
+ t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
61
+ t.fork = false
62
+ t.profile = 'old-qemu-image'
63
+ end
56
64
  end
57
65
 
58
66
  Rake::RDocTask.new do |rd|
@@ -62,5 +70,5 @@ Rake::RDocTask.new do |rd|
62
70
  rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
63
71
  end
64
72
 
65
- task :default => [:spec,:features]
73
+ task :default => [:spec,"features:new_qemu"]
66
74
 
data/bin/segment_upload CHANGED
@@ -11,7 +11,7 @@ class App
11
11
  include Methadone::SH
12
12
  include Methadone::CLILogging
13
13
 
14
- main do |to_uri|
14
+ main do |to_uri,|
15
15
  options['auth_uri'] = options['to_uri'] = URI(to_uri)
16
16
  options['segment-size'] = Filesize.from(options['segment-size'])
17
17
  Uricp::OrbitAuth.validate_options(options)
data/bin/uricp CHANGED
@@ -11,7 +11,7 @@ class App
11
11
  include Methadone::SH
12
12
  include Methadone::CLILogging
13
13
 
14
- main do |from_uri, to_uri|
14
+ main do |from_uri, to_uri,|
15
15
  options['from_uri'] = URI(from_uri)
16
16
  options['to_uri'] = URI(to_uri)
17
17
  options['auth_uri'] = select_auth_url
data/cucumber.yml ADDED
@@ -0,0 +1,3 @@
1
+ default: --profile new-qemu-image
2
+ new-qemu-image: --tags ~@old-qemu-image
3
+ old-qemu-image: --tags ~@new-qemu-image
@@ -1,5 +1,6 @@
1
1
  @orbit
2
2
  @orbitdownloads
3
+ @new-qemu-image
3
4
  Feature: Authenticated download of images from orbit
4
5
  In order to download images from orbit
5
6
  As a command line user
@@ -8,13 +8,13 @@ Feature: Download Public VM images
8
8
  And the default aruba timeout is 15 seconds
9
9
 
10
10
  Scenario: HTTP URI qcow2 to qcow2
11
- When I successfully run `uricp https://foss-lab-manual.googlecode.com/files/freedos.qcow2 file:///tmp/uricp/srv-testy`
11
+ When I successfully run `uricp http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2 file:///tmp/uricp/srv-testy`
12
12
  Then a file named "/tmp/uricp/srv-testy" should exist
13
13
  And the file named "/tmp/uricp/srv-testy" should have a file format of "qcow2"
14
14
 
15
15
  Scenario: HTTP URI qcow2 via cache
16
16
  Given a correctly initialised cache at "/tmp/uricp"
17
- When I successfully run `uricp --cache=/tmp/uricp https://foss-lab-manual.googlecode.com/files/freedos.qcow2 file:///tmp/uricp/srv-testy`
17
+ When I successfully run `uricp --cache=/tmp/uricp http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2 file:///tmp/uricp/srv-testy`
18
18
  Then a file named "/tmp/uricp/srv-testy" should exist
19
19
  And the file named "/tmp/uricp/srv-testy" should have a file format of "qcow2"
20
20
  And a file named "/tmp/uricp/cache/freedos.qcow2" should exist
@@ -22,15 +22,16 @@ Feature: Download Public VM images
22
22
 
23
23
  Scenario: HTTP URI qcow2 to qcow2 via cache
24
24
  Given a correctly initialised cache at "/tmp/uricp"
25
- When I successfully run `uricp --target-format=qcow2 --cache=/tmp/uricp https://foss-lab-manual.googlecode.com/files/freedos.qcow2 file:///tmp/uricp/srv-testy`
25
+ When I successfully run `uricp --target-format=qcow2 --cache=/tmp/uricp http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2 file:///tmp/uricp/srv-testy`
26
26
  Then a file named "/tmp/uricp/srv-testy" should exist
27
27
  And the file named "/tmp/uricp/srv-testy" should have a file format of "qcow2"
28
28
  And a file named "/tmp/uricp/cache/freedos.qcow2" should exist
29
29
  And the file named "/tmp/uricp/cache/freedos.qcow2" should have a file format of "qcow2"
30
30
 
31
+ @new-qemu-image
31
32
  Scenario: HTTP URI qcow2 to qcow2v3 via cache
32
33
  Given a correctly initialised cache at "/tmp/uricp"
33
- When I successfully run `uricp --target-format=qcow2v3 --cache=/tmp/uricp https://foss-lab-manual.googlecode.com/files/freedos.qcow2 file:///tmp/uricp/srv-testy`
34
+ When I successfully run `uricp --target-format=qcow2v3 --cache=/tmp/uricp http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2 file:///tmp/uricp/srv-testy`
34
35
  Then a file named "/tmp/uricp/srv-testy" should exist
35
36
  And the file named "/tmp/uricp/srv-testy" should have a file format of "qcow2v3"
36
37
  And a file named "/tmp/uricp/cache/freedos.qcow2" should exist
@@ -38,7 +39,7 @@ Feature: Download Public VM images
38
39
 
39
40
  Scenario: HTTP URI qcow2 to raw via cache
40
41
  Given a correctly initialised cache at "/tmp/uricp"
41
- When I successfully run `uricp --target-format=raw --cache=/tmp/uricp https://foss-lab-manual.googlecode.com/files/freedos.qcow2 file:///tmp/uricp/srv-testy`
42
+ When I successfully run `uricp --target-format=raw --cache=/tmp/uricp http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2 file:///tmp/uricp/srv-testy`
42
43
  Then a file named "/tmp/uricp/srv-testy" should exist
43
44
  And the file named "/tmp/uricp/srv-testy" should have a file format of "raw"
44
45
  And a file named "/tmp/uricp/cache/freedos.qcow2" should exist
@@ -48,7 +49,7 @@ Feature: Download Public VM images
48
49
  Scenario: HTTP URI from cache
49
50
  Given a correctly initialised cache at "/tmp/uricp"
50
51
  And a 102400 byte file named "/tmp/uricp/cache/freedos.qcow2"
51
- When I successfully run `uricp --cache=/tmp/uricp https://foss-lab-manual.googlecode.com/files/freedos.qcow2 file:///tmp/uricp/srv-testy`
52
+ When I successfully run `uricp --cache=/tmp/uricp http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2 file:///tmp/uricp/srv-testy`
52
53
  Then a 102400 byte file named "/tmp/uricp/srv-testy" should exist
53
54
  And a 102400 byte file named "/tmp/uricp/cache/freedos.qcow2" should exist
54
55
 
@@ -60,7 +61,7 @@ Feature: Download Public VM images
60
61
 
61
62
  Scenario: Unsupported target URI should error
62
63
  Given a correctly initialised cache at "/tmp/uricp"
63
- When I run `uricp --target-format=raw --cache=/tmp/uricp https://foss-lab-manual.googlecode.com/files/freedos.qcow2 http://foss-lab-manual.googlecode.com/files/freedos.qcow2`
64
+ When I run `uricp --target-format=raw --cache=/tmp/uricp http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2 http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2`
64
65
  Then the exit status should not be 0
65
66
  And the stderr should contain "Unsupported transfer"
66
67
 
@@ -58,7 +58,7 @@ Feature: Documented Help
58
58
  And the stderr should contain "needless argument"
59
59
 
60
60
  Scenario: authentication with normal http should fail
61
- When I run `uricp --auth-user cli-xxxxx --auth-key fred https://foss-lab-manual.googlecode.com/files file://tmp/temp`
61
+ When I run `uricp --auth-user cli-xxxxx --auth-key fred http://orbit.brightbox.com/v1/acc-tqc4c/downloads/freedos.qcow2 file://tmp/temp`
62
62
  Then the exit status should not be 0
63
63
  And the stderr should contain "Cannot authenticate"
64
64
 
@@ -0,0 +1,115 @@
1
+ @orbit
2
+ @orbitdownloads
3
+ @old-qemu-image
4
+ Feature: Authenticated download of images from orbit
5
+ In order to download images from orbit
6
+ As a command line user
7
+ I want to retrieve the URI via an optional cache and copy correctly to target in the right format
8
+
9
+ Background:
10
+ Given an empty directory named "/tmp/uricp"
11
+ And the default aruba timeout is 15 seconds
12
+ And a container called "test"
13
+
14
+ Scenario: qcow download no conversion, no cache
15
+ When I retrieve "img-qcow2" from container "test" into "file:///tmp/uricp/srv-test1"
16
+ Then a file named "/tmp/uricp/srv-test1" should exist
17
+ And the file named "/tmp/uricp/srv-test1" should have a file format of "qcow2"
18
+
19
+ Scenario: lz4 download no conversion, no cache
20
+ When I retrieve "img-lz4cy" from container "test" into "file:///tmp/uricp/srv-test2"
21
+ Then a file named "/tmp/uricp/srv-test2" should exist
22
+ And the file named "/tmp/uricp/srv-test2" should have a file format of "lz4"
23
+
24
+ Scenario: qcow download no conversion, cache
25
+ Given a correctly initialised cache at "/tmp/uricp"
26
+ When I retrieve "img-qcow2" with options "--cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test3"
27
+ Then a file named "/tmp/uricp/srv-test3" should exist
28
+ And the file named "/tmp/uricp/srv-test3" should have a file format of "qcow2"
29
+ And a file named "/tmp/uricp/cache/img-qcow2" should exist
30
+ And the file named "/tmp/uricp/cache/img-qcow2" should have a file format of "qcow2"
31
+
32
+ Scenario: zero download convert to qcow2, cache
33
+ Given a correctly initialised cache at "/tmp/uricp"
34
+ When I retrieve "img-zeroy" with options "--target-format=qcow2 --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-testz"
35
+ Then a file named "/tmp/uricp/srv-testz" should exist
36
+ And the file named "/tmp/uricp/srv-testz" should have a file format of "qcow2"
37
+ And a 0 byte file named "/tmp/uricp/cache/img-zeroy" should exist
38
+ And the file named "/tmp/uricp/cache/img-zeroy" should have a file format of "raw"
39
+
40
+ Scenario: qcow download convert to raw, cache
41
+ Given a correctly initialised cache at "/tmp/uricp"
42
+ When I retrieve "img-qcow2" with options "--target-format=raw --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test4"
43
+ Then a file named "/tmp/uricp/srv-test4" should exist
44
+ And the file named "/tmp/uricp/srv-test4" should have a file format of "raw"
45
+ And a file named "/tmp/uricp/cache/img-qcow2" should exist
46
+ And the file named "/tmp/uricp/cache/img-qcow2" should have a file format of "qcow2"
47
+
48
+ Scenario: qcow download convert to qcow2, cache
49
+ Given a correctly initialised cache at "/tmp/uricp"
50
+ When I retrieve "img-qcow2" with options "--target-format=qcow2 --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test5"
51
+ Then a file named "/tmp/uricp/srv-test5" should exist
52
+ And the file named "/tmp/uricp/srv-test5" should have a file format of "qcow2"
53
+ And a file named "/tmp/uricp/cache/img-qcow2" should exist
54
+ And the file named "/tmp/uricp/cache/img-qcow2" should have a file format of "qcow2"
55
+
56
+ Scenario: qcow download no conversion, from cache
57
+ Given a correctly initialised cache at "/tmp/uricp"
58
+ And a cache of "img-qcow2" from container "test" at "/tmp/uricp"
59
+ When I retrieve "img-qcow2" with options "--cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test6"
60
+ Then a file named "/tmp/uricp/srv-test6" should exist
61
+ And the file named "/tmp/uricp/srv-test6" should have a file format of "qcow2"
62
+ And a file named "/tmp/uricp/cache/img-qcow2" should exist
63
+ And the file named "/tmp/uricp/cache/img-qcow2" should have a file format of "qcow2"
64
+
65
+ Scenario: qcow download convert to raw from cache
66
+ Given a correctly initialised cache at "/tmp/uricp"
67
+ And a cache of "img-qcow2" from container "test" at "/tmp/uricp"
68
+ When I retrieve "img-qcow2" with options "--target-format=raw --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test7"
69
+ Then a file named "/tmp/uricp/srv-test7" should exist
70
+ And the file named "/tmp/uricp/srv-test7" should have a file format of "raw"
71
+ And a file named "/tmp/uricp/cache/img-qcow2" should exist
72
+ And the file named "/tmp/uricp/cache/img-qcow2" should have a file format of "qcow2"
73
+
74
+ Scenario: qcow download convert to qcow2 from cache
75
+ Given a correctly initialised cache at "/tmp/uricp"
76
+ And a cache of "img-qcow2" from container "test" at "/tmp/uricp"
77
+ When I retrieve "img-qcow2" with options "--target-format=qcow2 --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test8"
78
+ Then a file named "/tmp/uricp/srv-test8" should exist
79
+ And the file named "/tmp/uricp/srv-test8" should have a file format of "qcow2"
80
+ And a file named "/tmp/uricp/cache/img-qcow2" should exist
81
+ And the file named "/tmp/uricp/cache/img-qcow2" should have a file format of "qcow2"
82
+
83
+ Scenario: lz4 download convert to raw, cache
84
+ Given a correctly initialised cache at "/tmp/uricp"
85
+ When I retrieve "img-lz4cy" with options "--target-format=raw --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-test9"
86
+ Then a file named "/tmp/uricp/srv-test9" should exist
87
+ And the file named "/tmp/uricp/srv-test9" should have a file format of "raw"
88
+ And a file named "/tmp/uricp/cache/img-lz4cy" should exist
89
+ And the file named "/tmp/uricp/cache/img-lz4cy" should have a file format of "lz4"
90
+
91
+ Scenario: lz4 download convert to raw, from cache
92
+ Given a correctly initialised cache at "/tmp/uricp"
93
+ And a cache of "img-lz4cy" from container "test" at "/tmp/uricp"
94
+ When I retrieve "img-lz4cy" with options "--target-format=raw --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-testa"
95
+ Then a file named "/tmp/uricp/srv-testa" should exist
96
+ And the file named "/tmp/uricp/srv-testa" should have a file format of "raw"
97
+ And a file named "/tmp/uricp/cache/img-lz4cy" should exist
98
+ And the file named "/tmp/uricp/cache/img-lz4cy" should have a file format of "lz4"
99
+
100
+ Scenario: lz4 download convert to qcow2, cache
101
+ Given a correctly initialised cache at "/tmp/uricp"
102
+ When I retrieve "img-lz4cy" with options "--target-format=qcow2 --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-testb"
103
+ Then a file named "/tmp/uricp/srv-testb" should exist
104
+ And the file named "/tmp/uricp/srv-testb" should have a file format of "qcow2"
105
+ And a file named "/tmp/uricp/cache/img-lz4cy" should exist
106
+ And the file named "/tmp/uricp/cache/img-lz4cy" should have a file format of "lz4"
107
+
108
+ Scenario: lz4 download convert to qcow2, from cache
109
+ Given a correctly initialised cache at "/tmp/uricp"
110
+ And a cache of "img-lz4cy" from container "test" at "/tmp/uricp"
111
+ When I retrieve "img-lz4cy" with options "--target-format=qcow2 --cache=/tmp/uricp" from container "test" into "file:///tmp/uricp/srv-testa"
112
+ Then a file named "/tmp/uricp/srv-testa" should exist
113
+ And the file named "/tmp/uricp/srv-testa" should have a file format of "qcow2"
114
+ And a file named "/tmp/uricp/cache/img-lz4cy" should exist
115
+ And the file named "/tmp/uricp/cache/img-lz4cy" should have a file format of "lz4"
@@ -37,6 +37,7 @@ Feature: Upload VM images with authentication
37
37
 
38
38
  Scenario: Direct segmented Upload with userid in qcow2 format
39
39
  Given a 102400 byte file named "/tmp/uricp/srv-testd"
40
+ And the default aruba timeout is 60 seconds
40
41
  And a correctly initialised cache at "/tmp/uricp"
41
42
  When I store "img-testd" with segment size "10kiB" and options "--target-format 'qcow2' --cache /tmp/uricp" into container "test_upload" from "file:///tmp/uricp/srv-testd" with a userid
42
43
  Then a qcow2 entry should exist in container "test_upload" called "img-testd"
@@ -50,6 +51,7 @@ Feature: Upload VM images with authentication
50
51
 
51
52
  Scenario: Direct upload with userid of zero byte file.
52
53
  Given an empty file named "/tmp/uricp/srv-zerob"
54
+ And the default aruba timeout is 60 seconds
53
55
  And a correctly initialised cache at "/tmp/uricp"
54
56
  When I store "img-zerob" with segment size "10kiB" and options "--target-format 'qcow2' --cache /tmp/uricp" into container "test_upload" from "file:///tmp/uricp/srv-zerob" with a userid
55
57
  Then a qcow2 entry should exist in container "test_upload" called "img-zerob"
@@ -25,3 +25,4 @@ Feature: Segmented Upload Command
25
25
  When I upload "img-testb" with segment size "10kib" into container "temp_dlo" from "/tmp/uricp/srv-testb" as a stream
26
26
  Then a 102400 byte entry should exist in container "temp_dlo" called "img-testb"
27
27
  And the container "temp_dlo" should contain 11 entries
28
+
@@ -20,7 +20,7 @@ Feature: Documented Help for Segmented Upload
20
20
  |to_uri|which is required|
21
21
 
22
22
  Scenario: auth token and auth-user are mutually exclusive
23
- When I run `segment_upload --auth-token abcdef --auth-user xyz --auth-key abc http://source file:///target`
23
+ When I run `segment_upload --auth-token abcdef --auth-user xyz --auth-key abc http://source`
24
24
  Then the exit status should not be 0
25
25
  And the stderr should contain "needless argument"
26
26
 
@@ -45,7 +45,7 @@ Feature: Documented Help for Segmented Upload
45
45
  And the stderr should contain "unsupported url"
46
46
 
47
47
  Scenario: authentication with normal http should fail
48
- When I run `segment_upload --auth-user cli-xxxxx --auth-key fred https://foss-lab-manual.googlecode.com/files`
48
+ When I run `segment_upload --auth-user cli-xxxxx --auth-key fred http://orbit.brightbox.com/v1/acc-tqs4c/downloads`
49
49
  Then the exit status should not be 0
50
50
  And the stderr should contain "Cannot authenticate"
51
51
 
@@ -1,21 +1,29 @@
1
1
  require 'inifile'
2
2
 
3
3
  def obtain_credentials
4
- config = IniFile.load(ENV['HOME']+ '/.brightbox/config') ||
5
- raise(RuntimeError, "No brightbox config in home directory. Can't obtain auth token for tests")
6
- section = config.sections.first
7
- [config[section]['client_id'], config[section]['secret']]
4
+ if ENV['ORBIT_USER'] && ENV['ORBIT_KEY']
5
+ [ENV['ORBIT_USER'], ENV['ORBIT_KEY']]
6
+ else
7
+ config = IniFile.load(ENV['HOME']+ '/.brightbox/config')
8
+ if config.nil? || config.sections.empty?
9
+ raise(RuntimeError, "No brightbox config in home directory. Can't obtain auth token for tests")
10
+ end
11
+ section = config.sections.first
12
+ [config[section]['client_id'], config[section]['secret']]
13
+ end
8
14
  end
9
15
 
10
16
  def fetch_orbit_token
11
17
  @clientid, @key = obtain_credentials
12
- cmd = "curl -I https://orbit.brightbox.com/v1 -H 'X-Auth-User: #{@clientid}' -H 'X-Auth-Key: #{@key}'"
18
+ @current_url_target = ENV['ORBIT_URL'] || 'https://orbit.brightbox.com/v1'
19
+ cmd = "curl -I #{@current_url_target} -H 'X-Auth-User: #{@clientid}' -H 'X-Auth-Key: #{@key}'"
13
20
  run_simple(unescape(cmd))
14
21
  stdout_from(cmd).each_line do |line|
15
22
  key, value = line.strip.split(/\s*:\s*/,2)
16
23
  @current_auth_token = value if key == 'X-Auth-Token'
17
24
  @current_storage_url = value if key == 'X-Storage-Url'
18
25
  end
26
+ raise(RuntimeError, "Credentials not accepted. Can't obtain auth token for tests.") unless @current_auth_token && @current_storage_url
19
27
  end
20
28
 
21
29
  def create_download_file(filetype, name, container)
@@ -30,7 +38,7 @@ def create_download_file(filetype, name, container)
30
38
  when 'zero'
31
39
  size = '0'
32
40
  end
33
- cmd = "qemu-img create -q -f #{format} #{tempfile} #{size}"
41
+ cmd = "qemu-img create -f #{format} #{tempfile} #{size} >/dev/null 2>&1"
34
42
  system(unescape(cmd))
35
43
  cmd = "cat #{tempfile}"
36
44
  if filetype == 'lz4'
@@ -60,9 +68,10 @@ Given(/^a cache of "(.*?)" from container "(.*?)" at "(.*?)"$/) do |name, contai
60
68
  end
61
69
 
62
70
  Given /^a (\d+) byte lz4 file named "([^"]*)"$/ do |file_size, file_name|
71
+ lz4_target=file_name+'.lz4'
63
72
  write_fixed_size_file(file_name, file_size.to_i)
64
- system("lz4c #{file_name}")
65
- File.rename file_name+'.lz4', file_name
73
+ system("lz4c #{file_name} #{lz4_target}")
74
+ File.rename lz4_target, file_name
66
75
  end
67
76
 
68
77
  When(/^I store "([^"]*)" into container "([^"]*)" from "([^"]*)"$/) do |name, container, source|
@@ -179,6 +188,11 @@ end
179
188
 
180
189
  Before('@orbit') do
181
190
  fetch_orbit_token
191
+ unless $orbit_setup
192
+ system("swift --quiet --insecure --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete test")
193
+ system("swift --quiet --insecure --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete temp_dlo")
194
+ system("swift --quiet --insecure --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete test_upload")
195
+ end
182
196
  end
183
197
 
184
198
  Before('@orbitdownloads') do
@@ -194,9 +208,7 @@ end
194
208
 
195
209
  After('@orbit') do
196
210
  if @current_auth_token && @current_container
197
- steps %{
198
- When I successfully run `swift --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete #{@current_container} #{@current_name}`
199
- }
211
+ system("swift --quiet --insecure --os-storage-url=#{@current_storage_url} --os-auth-token=#{@current_auth_token} delete #{@current_container} #{@current_name}")
200
212
  @current_container = @current_name = nil
201
213
  end
202
214
  end
@@ -10,11 +10,18 @@ Feature: User authenticated download of images from orbit
10
10
  And the default aruba timeout is 15 seconds
11
11
  And a container called "test"
12
12
 
13
- Scenario: qcow download no conversion, no cache with userid
13
+ @new-qemu-image
14
+ Scenario: qcow2v3 download no conversion, no cache with userid
14
15
  When I retrieve "img-qcow2" from container "test" into "file:///tmp/uricp/srv-test1" with a userid
15
16
  Then a file named "/tmp/uricp/srv-test1" should exist
16
17
  And the file named "/tmp/uricp/srv-test1" should have a file format of "qcow2v3"
17
18
 
19
+ @old-qemu-image
20
+ Scenario: qcow2 download no conversion, no cache with userid
21
+ When I retrieve "img-qcow2" from container "test" into "file:///tmp/uricp/srv-test1" with a userid
22
+ Then a file named "/tmp/uricp/srv-test1" should exist
23
+ And the file named "/tmp/uricp/srv-test1" should have a file format of "qcow2"
24
+
18
25
  Scenario: direct upload with userid
19
26
  Given a 102400 byte file named "/tmp/uricp/srv-testy"
20
27
  When I store "img-usrid" into container "test" from "file:///tmp/uricp/srv-testy" with a userid
@@ -21,7 +21,7 @@ unless IO.respond_to? :copy_stream
21
21
  return count
22
22
  else
23
23
  amount = copy_length.to_i
24
- buf_size = 2**16
24
+ buf_size = [amount, 2**16].min
25
25
  buffer=""
26
26
  while amount > 0 do
27
27
  src.read(buf_size, buffer)
data/lib/uricp/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Uricp
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  DEFAULT_SEGMENT_SIZE = "5 GiB"
4
4
  end
data/uricp.gemspec CHANGED
@@ -22,11 +22,12 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency('rdoc')
24
24
  spec.add_development_dependency('aruba')
25
+ spec.add_development_dependency('cucumber', '~> 1.3')
25
26
  spec.add_development_dependency('rake')
26
27
  spec.add_dependency('methadone', '~> 1.8.0')
27
28
  spec.add_dependency('open4', '~> 1.3.0')
28
29
  spec.add_dependency('filesize', '= 0.0.2')
29
30
  spec.add_dependency('sendfile', '~> 1.2.0')
30
31
  spec.add_development_dependency('rspec', '~> 2.99')
31
- spec.add_development_dependency('inifile', '~> 3.0')
32
+ spec.add_development_dependency('inifile', '~> 1.1')
32
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uricp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-17 00:00:00.000000000 Z
12
+ date: 2015-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -75,6 +75,22 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: cucumber
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '1.3'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '1.3'
78
94
  - !ruby/object:Gem::Dependency
79
95
  name: rake
80
96
  requirement: !ruby/object:Gem::Requirement
@@ -178,7 +194,7 @@ dependencies:
178
194
  requirements:
179
195
  - - ~>
180
196
  - !ruby/object:Gem::Version
181
- version: '3.0'
197
+ version: '1.1'
182
198
  type: :development
183
199
  prerelease: false
184
200
  version_requirements: !ruby/object:Gem::Requirement
@@ -186,7 +202,7 @@ dependencies:
186
202
  requirements:
187
203
  - - ~>
188
204
  - !ruby/object:Gem::Version
189
- version: '3.0'
205
+ version: '1.1'
190
206
  description: Copy one URL to another with optional cacheing
191
207
  email:
192
208
  - neil@aldur.co.uk
@@ -197,16 +213,22 @@ extensions: []
197
213
  extra_rdoc_files: []
198
214
  files:
199
215
  - .gitignore
216
+ - Dockerfile_centos6.6
217
+ - Dockerfile_centos7
218
+ - Dockerfile_trusty-ruby193
200
219
  - Gemfile
220
+ - Gemfile.lock
201
221
  - LICENSE.txt
202
222
  - README.md
203
223
  - README.rdoc
204
224
  - Rakefile
205
225
  - bin/segment_upload
206
226
  - bin/uricp
227
+ - cucumber.yml
207
228
  - features/auth_download.feature
208
229
  - features/cacheable_from_uri.feature
209
230
  - features/documented_options.feature
231
+ - features/qcow2_auth_download.feature
210
232
  - features/remote_upload.feature
211
233
  - features/segmented_upload.feature
212
234
  - features/segmented_upload_options.feature
@@ -269,6 +291,7 @@ test_files:
269
291
  - features/auth_download.feature
270
292
  - features/cacheable_from_uri.feature
271
293
  - features/documented_options.feature
294
+ - features/qcow2_auth_download.feature
272
295
  - features/remote_upload.feature
273
296
  - features/segmented_upload.feature
274
297
  - features/segmented_upload_options.feature