suppository 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +76 -0
  3. data/.rubocop.yml +5 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +19 -0
  6. data/Gemfile +4 -0
  7. data/Guardfile +30 -0
  8. data/LICENSE.txt +674 -0
  9. data/README.md +103 -0
  10. data/Rakefile +34 -0
  11. data/bin/suppository +36 -0
  12. data/fixtures/curl_7.22.0-3ubuntu4.11_amd64.deb +0 -0
  13. data/fixtures/vim_7.3.547-7_amd64.deb +0 -0
  14. data/lib/suppository/add_command.rb +116 -0
  15. data/lib/suppository/checksummed.rb +24 -0
  16. data/lib/suppository/cli.rb +26 -0
  17. data/lib/suppository/command_runner.rb +30 -0
  18. data/lib/suppository/create_command.rb +75 -0
  19. data/lib/suppository/dpkg_deb.rb +29 -0
  20. data/lib/suppository/dpkg_deb_line.rb +28 -0
  21. data/lib/suppository/exceptions.rb +20 -0
  22. data/lib/suppository/gzip.rb +14 -0
  23. data/lib/suppository/help.rb +22 -0
  24. data/lib/suppository/help_command.rb +13 -0
  25. data/lib/suppository/logger.rb +24 -0
  26. data/lib/suppository/master_deb.rb +62 -0
  27. data/lib/suppository/package.rb +23 -0
  28. data/lib/suppository/release.rb +57 -0
  29. data/lib/suppository/repository.rb +16 -0
  30. data/lib/suppository/tty.rb +43 -0
  31. data/lib/suppository/version.rb +3 -0
  32. data/lib/suppository/version_command.rb +12 -0
  33. data/lib/suppository.rb +5 -0
  34. data/spec/spec_helper.rb +55 -0
  35. data/spec/suppository/add_command_spec.rb +141 -0
  36. data/spec/suppository/cli_spec.rb +50 -0
  37. data/spec/suppository/command_runner_spec.rb +26 -0
  38. data/spec/suppository/create_command_spec.rb +80 -0
  39. data/spec/suppository/dpkg_deb_line_spec.rb +36 -0
  40. data/spec/suppository/dpkg_deb_spec.rb +65 -0
  41. data/spec/suppository/gzip_spec.rb.rb +22 -0
  42. data/spec/suppository/help_command_spec.rb +13 -0
  43. data/spec/suppository/help_spec.rb +12 -0
  44. data/spec/suppository/logger_spec.rb +64 -0
  45. data/spec/suppository/master_deb_spec.rb +84 -0
  46. data/spec/suppository/package_spec.rb +63 -0
  47. data/spec/suppository/release_spec.rb +70 -0
  48. data/spec/suppository/repository_spec.rb +53 -0
  49. data/spec/suppository/tty_spec.rb +92 -0
  50. data/spec/suppository/version_command_spec.rb +13 -0
  51. data/spec/suppository/version_spec.rb +13 -0
  52. data/spec/suppository_spec.rb +83 -0
  53. data/suppository.gemspec +34 -0
  54. metadata +286 -0
@@ -0,0 +1,57 @@
1
+ require 'English'
2
+
3
+ require 'suppository/exceptions'
4
+ require 'suppository/command_runner'
5
+ require 'fileutils'
6
+
7
+ module Suppository
8
+ class Release
9
+ def initialize(repo_path, dist, unsigned = false)
10
+ @dist = dist
11
+ @unsigned = unsigned
12
+ @dist_path = "#{repo_path}/dists/#{dist}"
13
+ @release_file = "#{@dist_path}/Release"
14
+ end
15
+
16
+ def create
17
+ open(@release_file, 'w') { |f| f.puts content }
18
+ sign unless @unsigned
19
+ end
20
+
21
+ private
22
+
23
+ def sign
24
+ gpg_file = "#{@release_file}.gpg"
25
+ FileUtils.rm_rf(gpg_file)
26
+ CommandRunner.new('gpg', "-abs -o #{gpg_file} #{@release_file}").run
27
+ end
28
+
29
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
30
+ def content
31
+ result = "Codename: #{@dist}\n"
32
+ component_dirs = Dir.glob("#{@dist_path}/*").select { |f| File.directory? f }
33
+ components = component_dirs.collect { |d| File.basename(d) }.join(' ')
34
+ arch_dirs = Dir.glob("#{@dist_path}/*/*").select { |f| File.directory? f }
35
+ architectures = arch_dirs.collect { |d| File.basename(d).split('-')[1] }
36
+ .uniq.join(' ')
37
+ result << "Architectures: #{architectures}\n"
38
+ result << "Components: #{components}\n"
39
+ result << "Date: #{Time.new.strftime('%a, %d %b %Y %H:%M:%S %Z')}\n"
40
+ packages = Dir.glob("#{@dist_path}/*/*/Packages*")
41
+ result << "MD5Sum:\n"
42
+ packages.each { |f| result << puts_hash(f, Digest::MD5.file(f)) }
43
+ result << "SHA1:\n"
44
+ packages.each { |f| result << puts_hash(f, Digest::SHA1.file(f)) }
45
+ result << "SHA256:\n"
46
+ packages.each { |f| result << puts_hash(f, Digest::SHA256.file(f)) }
47
+ result << "SHA512:\n"
48
+ packages.each { |f| result << puts_hash(f, Digest::SHA512.file(f)) }
49
+ result
50
+ end
51
+
52
+ def puts_hash(f, hash)
53
+ relative = f.split(@dist_path).pop[1..-1]
54
+ sprintf(" %s %17d %s\n", hash, File.size(f), relative)
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,16 @@
1
+ module Suppository
2
+ class Repository
3
+ attr_reader :path, :dists, :archs, :suppository
4
+
5
+ def initialize(path)
6
+ @path = File.expand_path(path)
7
+ @dists = %w(natty lucid precise saucy trusty)
8
+ @archs = %w(amd64 i386)
9
+ @suppository = "#{@path}/.suppository"
10
+ end
11
+
12
+ def exist?
13
+ File.exist? @suppository
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,43 @@
1
+ module Suppository
2
+ class Tty
3
+ class << self
4
+ def gray
5
+ bold 30
6
+ end
7
+
8
+ def white
9
+ bold 39
10
+ end
11
+
12
+ def red
13
+ underline 31
14
+ end
15
+
16
+ def reset
17
+ escape 0
18
+ end
19
+
20
+ def green
21
+ bold 32
22
+ end
23
+
24
+ def em
25
+ underline 39
26
+ end
27
+
28
+ private
29
+
30
+ def bold(n)
31
+ escape "1;#{n}"
32
+ end
33
+
34
+ def underline(n)
35
+ escape "4;#{n}"
36
+ end
37
+
38
+ def escape(n)
39
+ "\033[#{n}m" if $stdout.tty?
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,3 @@
1
+ module Suppository
2
+ VERSION = '0.0.2'
3
+ end
@@ -0,0 +1,12 @@
1
+
2
+
3
+ module Suppository
4
+ class VersionCommand
5
+ def initialize(_)
6
+ end
7
+
8
+ def run
9
+ puts "Suppository Version #{Suppository::VERSION}"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+
2
+ require 'suppository/version'
3
+
4
+ module Suppository
5
+ end
@@ -0,0 +1,55 @@
1
+ require 'logger'
2
+ require 'fakefs/spec_helpers'
3
+ require 'rspec/mocks/standalone'
4
+ require 'stringio'
5
+ require 'simplecov'
6
+ require "codeclimate-test-reporter"
7
+ CodeClimate::TestReporter.start
8
+
9
+ SimpleCov.start do
10
+ SimpleCov.minimum_coverage 100
11
+ SimpleCov.add_filter "/spec/"
12
+ end
13
+
14
+ lib = File.expand_path('../lib', __FILE__)
15
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
16
+
17
+ RSpec.configure do |config|
18
+
19
+ config.before do
20
+ $stdout = StringIO.new
21
+ end
22
+
23
+ config.after(:all) do
24
+ $stdout = STDOUT
25
+ end
26
+
27
+ config.filter_run :focus => true
28
+ config.run_all_when_everything_filtered = true
29
+ config.color = true
30
+ config.mock_with :rspec
31
+ config.order = 'random'
32
+ config.raise_errors_for_deprecations!
33
+ end
34
+
35
+
36
+ def get_exception
37
+ e_message = ""
38
+ begin
39
+ yield
40
+ rescue => e
41
+ e_message = e.message
42
+ end
43
+ e_message
44
+ end
45
+
46
+ def deb_file
47
+ File.expand_path(File.dirname(__FILE__)+"../../fixtures/curl_7.22.0-3ubuntu4.11_amd64.deb")
48
+ end
49
+
50
+ def deb_file_glob
51
+ File.expand_path(File.dirname(__FILE__)+"../../fixtures/*.deb")
52
+ end
53
+
54
+
55
+
@@ -0,0 +1,141 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/add_command'
4
+ require 'suppository/repository'
5
+ require 'suppository/release'
6
+ require 'suppository/create_command'
7
+ require 'suppository/exceptions'
8
+
9
+ describe Suppository::AddCommand do
10
+
11
+ before(:each) do
12
+ repository_path = "/tmp/supposotory_test_#{Time.now.to_f}"
13
+ @file_name = 'e5ca0a9797acda4bfe8404524f0976b3_b37ce9b17405d93c323c0b8bbe167c6f2dccfe02_5a315c56bc34f1ffed365f9aa50bbb36916e5a8fae8614f00d952983d4316555.deb'
14
+ @second_file = '2f860ed12d2ad99bacc78d95fb9e7989_323ee30c17a0ca4bbb2b95032fc79f84f4ca26f2_66bce137768403d517468a1f70bd98644558cd000f250dd8cc2faeedda5d4b2f.deb'
15
+ @repository = Suppository::Repository.new(repository_path)
16
+ Suppository::CreateCommand.new([@repository.path]).run
17
+ @dist = 'trusty'
18
+ @component = 'internal'
19
+ @adder = Suppository::AddCommand.new([@repository.path, @dist, @component, deb_file])
20
+ end
21
+
22
+ after(:each) do
23
+ FileUtils.rm_r @repository.path
24
+ end
25
+
26
+ it "add the same package again" do
27
+ release = double(Suppository::Release)
28
+ expect(release).to receive(:create).twice
29
+ expect(Suppository::Release).to receive(:new).twice.with(@repository.path, @dist, false) { release }
30
+ @adder.run
31
+ @adder.run
32
+ expect(File.file?("#{@repository.suppository}/#{@file_name}")).to be_truthy
33
+ end
34
+
35
+ describe "expects release to work -" do
36
+ before(:each) do
37
+ release = double(Suppository::Release)
38
+ expect(release).to receive(:create)
39
+ expect(Suppository::Release).to receive(:new).with(@repository.path, @dist, false) { release }
40
+ end
41
+
42
+ it "add suppository file" do
43
+ @adder.run
44
+ expect(File.file?("#{@repository.suppository}/#{@file_name}")).to be_truthy
45
+ end
46
+
47
+ it "supports globs for deb file" do
48
+ @adder = Suppository::AddCommand.new([@repository.path, @dist, @component, deb_file_glob])
49
+ @adder.run
50
+ expect(File.file?("#{@repository.suppository}/#{@file_name}")).to be_truthy
51
+ expect(File.file?("#{@repository.suppository}/#{@second_file}")).to be_truthy
52
+ end
53
+
54
+ it "adds package to dists" do
55
+ @adder.run
56
+ @repository.dists.each do |dist|
57
+ @repository.archs.each do |arch|
58
+ if dist == @dist
59
+ expect(File.file?("#{@repository.path}/dists/#{dist}/#{@component}/binary-#{arch}/curl_7.22.0-3ubuntu4.11_amd64.deb")).to be_truthy
60
+ else
61
+ expect(File.file?("#{@repository.path}/dists/#{dist}/#{@component}/binary-#{arch}/curl_7.22.0-3ubuntu4.11_amd64.deb")).to be_falsy
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+
68
+ it "updates Packages file" do
69
+ supository_file = "#{@repository.suppository}/#{@file_name}"
70
+ @adder.run
71
+ @repository.archs.each do |arch|
72
+ internal_path = "dists/#{@dist}/#{@component}/binary-#{arch}"
73
+ path = "#{@repository.path}/#{internal_path}"
74
+ packages_path = "#{path}/Packages"
75
+ deb = Suppository::MasterDeb.new(supository_file)
76
+ content = Suppository::Package.new(internal_path, deb).content
77
+ expect(File.read(packages_path)).to match content
78
+ end
79
+ end
80
+
81
+ it "updates Packages.gz file" do
82
+ supository_file = "#{@repository.suppository}/#{@file_name}"
83
+ @adder.run
84
+ @repository.archs.each do |arch|
85
+ internal_path = "dists/#{@dist}/#{@component}/binary-#{arch}"
86
+ path = "#{@repository.path}/#{internal_path}"
87
+ packages_path = "#{path}/Packages.gz"
88
+ deb = Suppository::MasterDeb.new(supository_file)
89
+ content = Suppository::Package.new(internal_path,deb).content
90
+ result =""
91
+ Zlib::GzipReader.open(packages_path) {|gz|
92
+ result << gz.read
93
+ }
94
+
95
+ expect(result).to match content
96
+ end
97
+ end
98
+ end
99
+
100
+ it "cant add package to new dists" do
101
+ adder = Suppository::AddCommand.new([@repository.path, 'new_dist', @component, deb_file])
102
+ expect {
103
+ adder.run
104
+ }.to raise_error(InvalidDistribution)
105
+ end
106
+
107
+ it "cant add package to new component" do
108
+ adder = Suppository::AddCommand.new([@repository.path, @dist, 'testing', deb_file])
109
+ expect {
110
+ adder.run
111
+ }.to raise_error(InvalidComponent)
112
+ end
113
+
114
+ it "cant add package to non existant repository" do
115
+ adder = Suppository::AddCommand.new(['boom', @dist, 'testing', deb_file])
116
+
117
+ expect {
118
+ adder.run
119
+ }.to raise_error(InvalidRepositoryError)
120
+ end
121
+
122
+ it "needs non nil arguments" do
123
+ expect {
124
+ Suppository::AddCommand.new(nil)
125
+ }.to raise_error(UsageError)
126
+ end
127
+
128
+ it "needs arguments" do
129
+ expect {
130
+ Suppository::AddCommand.new([])
131
+ }.to raise_error(UsageError)
132
+ end
133
+
134
+ it "needs four arguments" do
135
+ expect {
136
+ Suppository::AddCommand.new([@repository.path, @dist, 'testing'])
137
+ }.to raise_error(UsageError)
138
+ end
139
+
140
+ end
141
+
@@ -0,0 +1,50 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/version'
4
+ require 'suppository/cli'
5
+ require 'suppository/repository'
6
+ require 'suppository/create_command'
7
+ require 'suppository/add_command'
8
+
9
+ describe Suppository::CLI do
10
+
11
+ before(:each) do
12
+ @path = '/tmp/repo123'
13
+ @repository = double(Suppository::Repository)
14
+ end
15
+
16
+ it "shows current version" do
17
+ command = double(Suppository::VersionCommand)
18
+ expect(Suppository::VersionCommand).to receive(:new).with([]) {command}
19
+ expect(command).to receive(:run)
20
+ Suppository::CLI.run(['version'])
21
+ end
22
+
23
+ it "can create new repository" do
24
+ creator = double(Suppository::CreateCommand)
25
+ expect(Suppository::CreateCommand).to receive(:new).with([@path]) {creator}
26
+ expect(creator).to receive(:run)
27
+ Suppository::CLI.run(['create', @path])
28
+ end
29
+
30
+ it "can add deb repository" do
31
+ adder = double(Suppository::AddCommand)
32
+ expect(Suppository::AddCommand).to receive(:new).with([@path, 'trusty', '/tmp/example.deb']) {adder}
33
+ expect(adder).to receive(:run)
34
+ Suppository::CLI.run(['add', @path , 'trusty', '/tmp/example.deb'])
35
+ end
36
+
37
+ it "rase usage error for empty args" do
38
+ expect {
39
+ Suppository::CLI.run([])
40
+ }.to raise_error(UsageError)
41
+ end
42
+
43
+ it "rase usage error for invalid command" do
44
+ expect {
45
+ Suppository::CLI.run(['bla'])
46
+ }.to raise_error(UsageError)
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,26 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/command_runner'
4
+ require 'suppository/exceptions'
5
+
6
+ describe Suppository::CommandRunner do
7
+
8
+ it "run command" do
9
+ runner = Suppository::CommandRunner.new('echo', '1234')
10
+ expect(runner.run).to eql("1234\n")
11
+ end
12
+
13
+ it "command not found" do
14
+ runner = Suppository::CommandRunner.new('notavalidcommand')
15
+ expect { runner.run }.to raise_error(CommandMissingError)
16
+ end
17
+
18
+ it "command error" do
19
+ runner = Suppository::CommandRunner.new('man', '--invalidoption')
20
+ expect { runner.run }.to raise_error(CommandError)
21
+ end
22
+
23
+
24
+ end
25
+
26
+
@@ -0,0 +1,80 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/create_command'
4
+ require 'suppository/repository'
5
+
6
+ describe Suppository::CreateCommand do
7
+
8
+ before(:each) do
9
+ repository_path = "/tmp/suppository_test_#{Time.now.to_f}"
10
+ @repository = Suppository::Repository.new(repository_path)
11
+ @creator = Suppository::CreateCommand.new([@repository.path])
12
+ end
13
+
14
+ after(:each) do
15
+ FileUtils.rm_r(@repository.path) if File.directory?(@repository.path)
16
+ end
17
+
18
+ it "can create new repository" do
19
+ expect{@creator.run}.to output("==> Created new Repository - #{@repository.path}\n").to_stdout
20
+ end
21
+
22
+
23
+ it "creates repository root folder" do
24
+ @creator.run
25
+ expect(File.directory?(@repository.path)).to be_truthy
26
+ end
27
+
28
+ it "creates a .supository file" do
29
+ @creator.run
30
+ expect(File.directory?("#{@repository.path}/.suppository")).to be_truthy
31
+ end
32
+
33
+ it "creates a Packages file" do
34
+ @creator.run
35
+ @repository.dists.each do |dist|
36
+ @repository.archs.each do |arch|
37
+ expect(File.file?("#{@repository.path}/dists/#{dist}/internal/binary-#{arch}/Packages")).to be_truthy
38
+ end
39
+ end
40
+ end
41
+
42
+ it "creates a Packages.gz file" do
43
+ @creator.run
44
+ @repository.dists.each do |dist|
45
+ @repository.archs.each do |arch|
46
+ file_name = "#{@repository.path}/dists/#{dist}/internal/binary-#{arch}/Packages.gz"
47
+ expect(Zlib::GzipReader.open(file_name)).to be_truthy
48
+ end
49
+ end
50
+ end
51
+
52
+
53
+ it "aborts if file suppository already exists" do
54
+ FileUtils.mkdir_p @repository.suppository
55
+ expect(get_exception{@creator.run}).to eql "#{@repository.path} is already a repository"
56
+ end
57
+
58
+ it "creates folder structure" do
59
+ @creator.run
60
+ @repository.dists.each do |dist|
61
+ @repository.archs.each do |arch|
62
+ expect(File.directory?("#{@repository.path}/dists/#{dist}/internal/binary-#{arch}")).to be_truthy
63
+ end
64
+ end
65
+ end
66
+
67
+ it "needs non nil arguments" do
68
+ expect {
69
+ Suppository::CreateCommand.new(nil)
70
+ }.to raise_error(UsageError)
71
+ end
72
+
73
+ it "needs arguments" do
74
+ expect {
75
+ Suppository::CreateCommand.new([])
76
+ }.to raise_error(UsageError)
77
+ end
78
+
79
+ end
80
+
@@ -0,0 +1,36 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/dpkg_deb_line'
4
+
5
+ describe Suppository::DpkgDebLine do
6
+
7
+ it "field" do
8
+ line = 'Depends: libc6 (>= 2.14), libcurl3 (>= 7.16.2-1), zlib1g (>= 1:1.1.4)'
9
+ values = Suppository::DpkgDebLine.new(line).attributes
10
+ expect(values['Depends']).to eql 'libc6 (>= 2.14), libcurl3 (>= 7.16.2-1), zlib1g (>= 1:1.1.4)'
11
+ end
12
+
13
+ it "description first line" do
14
+ line = 'Description: Get a file from an HTTP, HTTPS or FTP server'
15
+ values = Suppository::DpkgDebLine.new(line).attributes
16
+ expect(values['Description']).to eql 'Get a file from an HTTP, HTTPS or FTP server'
17
+ end
18
+
19
+ it "description other line" do
20
+ line = ' curl is a client to get files from servers using any of the supported'
21
+ values = Suppository::DpkgDebLine.new(line).attributes
22
+ expect(values['Description']).to eql ' curl is a client to get files from servers using any of the supported'
23
+ end
24
+
25
+ it "dot" do
26
+ line = ' .'
27
+ values = Suppository::DpkgDebLine.new(line).attributes
28
+ expect(values['Description']).to eql ' .'
29
+ end
30
+
31
+ it "handles invalid" do
32
+ expect(get_exception{Suppository::DpkgDebLine.new "Boom Bang"}).to eql "can't parse line - 'Boom Bang'"
33
+ end
34
+
35
+ end
36
+
@@ -0,0 +1,65 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/dpkg_deb'
4
+
5
+ describe Suppository::DpkgDeb do
6
+
7
+ before(:each) do
8
+ @instance = Suppository::DpkgDeb.new deb_file
9
+ end
10
+
11
+ it "package" do
12
+ expect(@instance.attibutes['Package']).to eql 'curl'
13
+ end
14
+
15
+ it "version" do
16
+ expect(@instance.attibutes['Version']).to eql '7.22.0-3ubuntu4.11'
17
+ end
18
+
19
+ it "architecture" do
20
+ expect(@instance.attibutes['Architecture']).to eql 'amd64'
21
+ end
22
+
23
+ it "maintainer" do
24
+ expect(@instance.attibutes['Maintainer']).to eql 'Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>'
25
+ end
26
+
27
+ it "installed size" do
28
+ expect(@instance.attibutes['Installed-Size']).to eql '345'
29
+ end
30
+
31
+ it "depends" do
32
+ expect(@instance.attibutes['Depends']).to eql 'libc6 (>= 2.14), libcurl3 (>= 7.16.2-1), zlib1g (>= 1:1.1.4)'
33
+ end
34
+
35
+ it "replaces" do
36
+ expect(@instance.attibutes['Replaces']).to eql 'curl-ssl'
37
+ end
38
+
39
+ it "provides" do
40
+ expect(@instance.attibutes['Provides']).to eql 'curl-ssl'
41
+ end
42
+
43
+ it "section" do
44
+ expect(@instance.attibutes['Section']).to eql 'web'
45
+ end
46
+
47
+ it "priority" do
48
+ expect(@instance.attibutes['Priority']).to eql 'optional'
49
+ end
50
+
51
+ it "homepage" do
52
+ expect(@instance.attibutes['Homepage']).to eql 'http://curl.haxx.se'
53
+ end
54
+
55
+ it "description" do
56
+ expect(@instance.attibutes['Description']).to eql "Get a file from an HTTP, HTTPS or FTP server curl is a client to get files from servers using any of the supported\n protocols. The command is designed to work without user interaction\n or any kind of interactivity.\n .\n curl offers a busload of useful tricks like proxy support, user\n authentication, FTP upload, HTTP post, file transfer resume and more.\n"
57
+ end
58
+
59
+ it "original_maintainer" do
60
+ expect(@instance.attibutes['Original-Maintainer']).to eql 'Ramakrishnan Muthukrishnan <rkrishnan@debian.org>'
61
+ end
62
+
63
+
64
+ end
65
+
@@ -0,0 +1,22 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/gzip'
4
+
5
+ describe Suppository::Gzip do
6
+
7
+ before(:each) do
8
+ @file = "/tmp/gzip_test_#{Time.now.to_f}.txt"
9
+ @file_gz = "#{@file}.gz"
10
+ end
11
+
12
+ after(:each) do
13
+ FileUtils.rm @file if File.exist? @file
14
+ FileUtils.rm @file_gz if File.exist? @file_gz
15
+ end
16
+
17
+ it "compress" do
18
+ Suppository::Gzip.compress @file
19
+ expect(Zlib::GzipReader.open(@file_gz)).to be_truthy
20
+ end
21
+
22
+ end
@@ -0,0 +1,13 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/help_command'
4
+
5
+ describe Suppository::HelpCommand do
6
+
7
+ it "shows help" do
8
+ command = Suppository::HelpCommand.new([])
9
+ expect{command.run}.to output(Suppository.help).to_stdout
10
+ end
11
+
12
+ end
13
+
@@ -0,0 +1,12 @@
1
+
2
+ require 'spec_helper'
3
+ require 'suppository/help'
4
+
5
+ describe Suppository do
6
+
7
+ it "has usage string" do
8
+ expect(Suppository.help).to eql("Example usage:\n\n suppository help\n - Display this Help message\n\n suppository version\n - Display version\n\n suppository create <REPOSITORY_PATH>\n - Create new empty repository in REPOSITORY_PATH\n\n suppository add <REPOSITORY_PATH> <DIST> <COMPONENT> <DEB_FILE> [--unsigned]\n - Add DEB_FILE to DIST and COMPONENT of repository at REPOSITORY_PATH\n\n")
9
+ end
10
+ end
11
+
12
+