pogo 2.31.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +73 -0
- data/bin/pogo +22 -0
- data/data/cacert.pem +3988 -0
- data/lib/heroku.rb +22 -0
- data/lib/heroku/auth.rb +320 -0
- data/lib/heroku/cli.rb +38 -0
- data/lib/heroku/client.rb +764 -0
- data/lib/heroku/client/heroku_postgresql.rb +111 -0
- data/lib/heroku/client/pgbackups.rb +113 -0
- data/lib/heroku/client/rendezvous.rb +105 -0
- data/lib/heroku/client/ssl_endpoint.rb +25 -0
- data/lib/heroku/command.rb +273 -0
- data/lib/heroku/command/account.rb +23 -0
- data/lib/heroku/command/accounts.rb +34 -0
- data/lib/heroku/command/addons.rb +305 -0
- data/lib/heroku/command/apps.rb +311 -0
- data/lib/heroku/command/auth.rb +86 -0
- data/lib/heroku/command/base.rb +230 -0
- data/lib/heroku/command/certs.rb +148 -0
- data/lib/heroku/command/config.rb +137 -0
- data/lib/heroku/command/db.rb +218 -0
- data/lib/heroku/command/domains.rb +85 -0
- data/lib/heroku/command/drains.rb +46 -0
- data/lib/heroku/command/git.rb +65 -0
- data/lib/heroku/command/help.rb +163 -0
- data/lib/heroku/command/keys.rb +115 -0
- data/lib/heroku/command/labs.rb +161 -0
- data/lib/heroku/command/logs.rb +98 -0
- data/lib/heroku/command/maintenance.rb +61 -0
- data/lib/heroku/command/pg.rb +277 -0
- data/lib/heroku/command/pgbackups.rb +289 -0
- data/lib/heroku/command/plugins.rb +110 -0
- data/lib/heroku/command/ps.rb +232 -0
- data/lib/heroku/command/releases.rb +124 -0
- data/lib/heroku/command/run.rb +179 -0
- data/lib/heroku/command/sharing.rb +89 -0
- data/lib/heroku/command/ssl.rb +61 -0
- data/lib/heroku/command/stack.rb +62 -0
- data/lib/heroku/command/status.rb +51 -0
- data/lib/heroku/command/update.rb +47 -0
- data/lib/heroku/command/version.rb +23 -0
- data/lib/heroku/deprecated.rb +5 -0
- data/lib/heroku/deprecated/help.rb +38 -0
- data/lib/heroku/distribution.rb +9 -0
- data/lib/heroku/helpers.rb +517 -0
- data/lib/heroku/helpers/heroku_postgresql.rb +104 -0
- data/lib/heroku/plugin.rb +161 -0
- data/lib/heroku/updater.rb +158 -0
- data/lib/heroku/version.rb +3 -0
- data/lib/vendor/heroku/okjson.rb +598 -0
- data/spec/helper/legacy_help.rb +16 -0
- data/spec/heroku/auth_spec.rb +246 -0
- data/spec/heroku/client/heroku_postgresql_spec.rb +34 -0
- data/spec/heroku/client/pgbackups_spec.rb +43 -0
- data/spec/heroku/client/rendezvous_spec.rb +62 -0
- data/spec/heroku/client/ssl_endpoint_spec.rb +48 -0
- data/spec/heroku/client_spec.rb +564 -0
- data/spec/heroku/command/addons_spec.rb +585 -0
- data/spec/heroku/command/apps_spec.rb +351 -0
- data/spec/heroku/command/auth_spec.rb +38 -0
- data/spec/heroku/command/base_spec.rb +109 -0
- data/spec/heroku/command/certs_spec.rb +178 -0
- data/spec/heroku/command/config_spec.rb +144 -0
- data/spec/heroku/command/db_spec.rb +110 -0
- data/spec/heroku/command/domains_spec.rb +87 -0
- data/spec/heroku/command/drains_spec.rb +34 -0
- data/spec/heroku/command/git_spec.rb +116 -0
- data/spec/heroku/command/help_spec.rb +93 -0
- data/spec/heroku/command/keys_spec.rb +120 -0
- data/spec/heroku/command/labs_spec.rb +99 -0
- data/spec/heroku/command/logs_spec.rb +60 -0
- data/spec/heroku/command/maintenance_spec.rb +51 -0
- data/spec/heroku/command/pg_spec.rb +223 -0
- data/spec/heroku/command/pgbackups_spec.rb +280 -0
- data/spec/heroku/command/plugins_spec.rb +104 -0
- data/spec/heroku/command/ps_spec.rb +195 -0
- data/spec/heroku/command/releases_spec.rb +130 -0
- data/spec/heroku/command/run_spec.rb +86 -0
- data/spec/heroku/command/sharing_spec.rb +59 -0
- data/spec/heroku/command/ssl_spec.rb +32 -0
- data/spec/heroku/command/stack_spec.rb +46 -0
- data/spec/heroku/command/status_spec.rb +48 -0
- data/spec/heroku/command/version_spec.rb +16 -0
- data/spec/heroku/command_spec.rb +211 -0
- data/spec/heroku/helpers/heroku_postgresql_spec.rb +109 -0
- data/spec/heroku/helpers_spec.rb +48 -0
- data/spec/heroku/plugin_spec.rb +172 -0
- data/spec/heroku/updater_spec.rb +44 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +209 -0
- data/spec/support/display_message_matcher.rb +49 -0
- data/spec/support/openssl_mock_helper.rb +8 -0
- metadata +220 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
require "heroku/command/drains"
|
|
3
|
+
|
|
4
|
+
describe Heroku::Command::Drains do
|
|
5
|
+
|
|
6
|
+
describe "drains" do
|
|
7
|
+
it "can list drains" do
|
|
8
|
+
stub_core.list_drains("myapp").returns("drains")
|
|
9
|
+
stderr, stdout = execute("drains")
|
|
10
|
+
stderr.should == ""
|
|
11
|
+
stdout.should == <<-STDOUT
|
|
12
|
+
drains
|
|
13
|
+
STDOUT
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "can add drains" do
|
|
17
|
+
stub_core.add_drain("myapp", "syslog://localhost/add").returns("added")
|
|
18
|
+
stderr, stdout = execute("drains:add syslog://localhost/add")
|
|
19
|
+
stderr.should == ""
|
|
20
|
+
stdout.should == <<-STDOUT
|
|
21
|
+
added
|
|
22
|
+
STDOUT
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "can remove drains" do
|
|
26
|
+
stub_core.remove_drain("myapp", "syslog://localhost/remove").returns("removed")
|
|
27
|
+
stderr, stdout = execute("drains:remove syslog://localhost/remove")
|
|
28
|
+
stderr.should == ""
|
|
29
|
+
stdout.should == <<-STDOUT
|
|
30
|
+
removed
|
|
31
|
+
STDOUT
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'heroku/command/git'
|
|
3
|
+
|
|
4
|
+
module Heroku::Command
|
|
5
|
+
describe Git do
|
|
6
|
+
|
|
7
|
+
before(:each) do
|
|
8
|
+
stub_core
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context("clone") do
|
|
12
|
+
|
|
13
|
+
before(:each) do
|
|
14
|
+
api.post_app("name" => "myapp", "stack" => "cedar")
|
|
15
|
+
FileUtils.mkdir('myapp')
|
|
16
|
+
FileUtils.chdir('myapp') { `git init` }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
after(:each) do
|
|
20
|
+
api.delete_app("myapp")
|
|
21
|
+
FileUtils.rm_rf('myapp')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "clones and adds remote" do
|
|
25
|
+
any_instance_of(Heroku::Command::Git) do |git|
|
|
26
|
+
stub(git).git('clone git@heroku.com:myapp.git ').returns("Cloning into 'myapp'...")
|
|
27
|
+
stub(git).git('remote').returns("origin")
|
|
28
|
+
stub(git).git('remote add heroku git@heroku.com:myapp.git')
|
|
29
|
+
end
|
|
30
|
+
stderr, stdout = execute("git:clone")
|
|
31
|
+
stderr.should == ""
|
|
32
|
+
stdout.should == <<-STDOUT
|
|
33
|
+
Cloning into 'myapp'...
|
|
34
|
+
Git remote heroku added
|
|
35
|
+
STDOUT
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "clones and sets -r remote" do
|
|
39
|
+
any_instance_of(Heroku::Command::Git) do |git|
|
|
40
|
+
stub(git).git('clone git@heroku.com:myapp.git ').returns("Cloning into 'myapp'...")
|
|
41
|
+
stub(git).git('remote').returns("origin")
|
|
42
|
+
stub(git).git('remote add other git@heroku.com:myapp.git')
|
|
43
|
+
end
|
|
44
|
+
stderr, stdout = execute("git:clone -r other")
|
|
45
|
+
stderr.should == ""
|
|
46
|
+
stdout.should == <<-STDOUT
|
|
47
|
+
Cloning into 'myapp'...
|
|
48
|
+
Git remote other added
|
|
49
|
+
STDOUT
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "clones and skips remote with no-remote" do
|
|
53
|
+
any_instance_of(Heroku::Command::Git) do |git|
|
|
54
|
+
stub(git).git('clone git@heroku.com:myapp.git ').returns("Cloning into 'myapp'...")
|
|
55
|
+
end
|
|
56
|
+
stderr, stdout = execute("git:clone --no-remote")
|
|
57
|
+
stderr.should == ""
|
|
58
|
+
stdout.should == <<-STDOUT
|
|
59
|
+
Cloning into 'myapp'...
|
|
60
|
+
STDOUT
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
context("remote") do
|
|
66
|
+
|
|
67
|
+
before(:each) do
|
|
68
|
+
api.post_app("name" => "myapp", "stack" => "cedar")
|
|
69
|
+
FileUtils.mkdir('myapp')
|
|
70
|
+
FileUtils.chdir('myapp') { `git init` }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
after(:each) do
|
|
74
|
+
api.delete_app("myapp")
|
|
75
|
+
FileUtils.rm_rf('myapp')
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "adds remote" do
|
|
79
|
+
any_instance_of(Heroku::Command::Git) do |git|
|
|
80
|
+
stub(git).git('remote').returns("origin")
|
|
81
|
+
stub(git).git('remote add heroku git@heroku.com:myapp.git')
|
|
82
|
+
end
|
|
83
|
+
stderr, stdout = execute("git:remote")
|
|
84
|
+
stderr.should == ""
|
|
85
|
+
stdout.should == <<-STDOUT
|
|
86
|
+
Git remote heroku added
|
|
87
|
+
STDOUT
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "adds -r remote" do
|
|
91
|
+
any_instance_of(Heroku::Command::Git) do |git|
|
|
92
|
+
stub(git).git('remote').returns("origin")
|
|
93
|
+
stub(git).git('remote add other git@heroku.com:myapp.git')
|
|
94
|
+
end
|
|
95
|
+
stderr, stdout = execute("git:remote -r other")
|
|
96
|
+
stderr.should == ""
|
|
97
|
+
stdout.should == <<-STDOUT
|
|
98
|
+
Git remote other added
|
|
99
|
+
STDOUT
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "skips remote when it already exists" do
|
|
103
|
+
any_instance_of(Heroku::Command::Git) do |git|
|
|
104
|
+
stub(git).git('remote').returns("heroku")
|
|
105
|
+
end
|
|
106
|
+
stderr, stdout = execute("git:remote")
|
|
107
|
+
stderr.should == <<-STDERR
|
|
108
|
+
! Git remote heroku already exists
|
|
109
|
+
STDERR
|
|
110
|
+
stdout.should == ""
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
require "heroku/command/apps"
|
|
3
|
+
require "heroku/command/help"
|
|
4
|
+
|
|
5
|
+
describe Heroku::Command::Help do
|
|
6
|
+
|
|
7
|
+
describe "help" do
|
|
8
|
+
it "should show root help with no args" do
|
|
9
|
+
stderr, stdout = execute("help")
|
|
10
|
+
stderr.should == ""
|
|
11
|
+
stdout.should include "Usage: heroku COMMAND [--app APP] [command-specific-options]"
|
|
12
|
+
stdout.should include "apps"
|
|
13
|
+
stdout.should include "help"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should show command help and namespace help when ambigious" do
|
|
17
|
+
stderr, stdout = execute("help apps")
|
|
18
|
+
stderr.should == ""
|
|
19
|
+
stdout.should include "heroku apps"
|
|
20
|
+
stdout.should include "list your apps"
|
|
21
|
+
stdout.should include "Additional commands"
|
|
22
|
+
stdout.should include "apps:create"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should show only command help when not ambiguous" do
|
|
26
|
+
stderr, stdout = execute("help apps:create")
|
|
27
|
+
stderr.should == ""
|
|
28
|
+
stdout.should include "heroku apps:create"
|
|
29
|
+
stdout.should include "create a new app"
|
|
30
|
+
stdout.should_not include "Additional commands"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should show command help with --help" do
|
|
34
|
+
stderr, stdout = execute("apps:create --help")
|
|
35
|
+
stderr.should == ""
|
|
36
|
+
stdout.should include "Usage: heroku apps:create"
|
|
37
|
+
stdout.should include "create a new app"
|
|
38
|
+
stdout.should_not include "Additional commands"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should redirect if the command is an alias" do
|
|
42
|
+
stderr, stdout = execute("help create")
|
|
43
|
+
stderr.should == ""
|
|
44
|
+
stdout.should include "Alias: create redirects to apps:create"
|
|
45
|
+
stdout.should include "Usage: heroku apps:create"
|
|
46
|
+
stdout.should include "create a new app"
|
|
47
|
+
stdout.should_not include "Additional commands"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should show if the command does not exist" do
|
|
51
|
+
stderr, stdout = execute("help sudo:sandwich")
|
|
52
|
+
stderr.should == <<-STDERR
|
|
53
|
+
! sudo:sandwich is not a heroku command. See `heroku help`.
|
|
54
|
+
STDERR
|
|
55
|
+
stdout.should == ""
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should show help with naked -h" do
|
|
59
|
+
stderr, stdout = execute("-h")
|
|
60
|
+
stderr.should == ""
|
|
61
|
+
stdout.should include "Usage: heroku COMMAND"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should show help with naked --help" do
|
|
65
|
+
stderr, stdout = execute("--help")
|
|
66
|
+
stderr.should == ""
|
|
67
|
+
stdout.should include "Usage: heroku COMMAND"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe "with legacy help" do
|
|
71
|
+
require "helper/legacy_help"
|
|
72
|
+
|
|
73
|
+
it "displays the legacy group in the namespace list" do
|
|
74
|
+
stderr, stdout = execute("help")
|
|
75
|
+
stderr.should == ""
|
|
76
|
+
stdout.should include "Foo Group"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "displays group help" do
|
|
80
|
+
stderr, stdout = execute("help foo")
|
|
81
|
+
stderr.should == ""
|
|
82
|
+
stdout.should include "do a bar to foo"
|
|
83
|
+
stdout.should include "do a baz to foo"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "displays legacy command-specific help" do
|
|
87
|
+
stderr, stdout = execute("help foo:bar")
|
|
88
|
+
stderr.should == ""
|
|
89
|
+
stdout.should include "do a bar to foo"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
require "heroku/command/keys"
|
|
3
|
+
|
|
4
|
+
module Heroku::Command
|
|
5
|
+
describe Keys do
|
|
6
|
+
KEY = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAp9AJD5QABmOcrkHm6SINuQkDefaR0MUrfgZ1Pxir3a4fM1fwa00dsUwbUaRuR7FEFD8n1E9WwDf8SwQTHtyZsJg09G9myNqUzkYXCmydN7oGr5IdVhRyv5ixcdiE0hj7dRnOJg2poSQ3Qi+Ka8SVJzF7nIw1YhuicHPSbNIFKi5s0D5a+nZb/E6MNGvhxoFCQX2IcNxaJMqhzy1ESwlixz45aT72mXYq0LIxTTpoTqma1HuKdRY8HxoREiivjmMQulYP+CxXFcMyV9kxTKIUZ/FXqlC6G5vSm3J4YScSatPOj9ID5HowpdlIx8F6y4p1/28r2tTl4CY40FFyoke4MQ== pedro@heroku"
|
|
7
|
+
|
|
8
|
+
before(:each) do
|
|
9
|
+
stub_core
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
context("add") do
|
|
13
|
+
|
|
14
|
+
after(:each) do
|
|
15
|
+
api.delete_key("pedro@heroku")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "tries to find a key if no key filename is supplied" do
|
|
19
|
+
Heroku::Auth.should_receive(:ask).and_return("y")
|
|
20
|
+
Heroku::Auth.should_receive(:generate_ssh_key)
|
|
21
|
+
File.should_receive(:exists?).with('.git').and_return(false)
|
|
22
|
+
File.should_receive(:exists?).with('/.ssh/id_rsa.pub').and_return(true)
|
|
23
|
+
File.should_receive(:read).with('/.ssh/id_rsa.pub').and_return(KEY)
|
|
24
|
+
stderr, stdout = execute("keys:add")
|
|
25
|
+
stderr.should == ""
|
|
26
|
+
stdout.should == <<-STDOUT
|
|
27
|
+
Could not find an existing public key.
|
|
28
|
+
Would you like to generate one? [Yn] Generating new SSH public key.
|
|
29
|
+
Uploading SSH public key /.ssh/id_rsa.pub... done
|
|
30
|
+
STDOUT
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "adds a key from a specified keyfile path" do
|
|
34
|
+
File.should_receive(:exists?).with('.git').and_return(false)
|
|
35
|
+
File.should_receive(:exists?).with('/my/key.pub').and_return(true)
|
|
36
|
+
File.should_receive(:read).with('/my/key.pub').and_return(KEY)
|
|
37
|
+
stderr, stdout = execute("keys:add /my/key.pub")
|
|
38
|
+
stderr.should == ""
|
|
39
|
+
stdout.should == <<-STDOUT
|
|
40
|
+
Uploading SSH public key /my/key.pub... done
|
|
41
|
+
STDOUT
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context("index") do
|
|
47
|
+
|
|
48
|
+
before do
|
|
49
|
+
api.post_key(KEY)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
after do
|
|
53
|
+
api.delete_key("pedro@heroku")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "list keys, trimming the hex code for better display" do
|
|
57
|
+
stderr, stdout = execute("keys")
|
|
58
|
+
stderr.should == ""
|
|
59
|
+
stdout.should == <<-STDOUT
|
|
60
|
+
=== email@example.com Keys
|
|
61
|
+
ssh-rsa AAAAB3NzaC...Fyoke4MQ== pedro@heroku
|
|
62
|
+
|
|
63
|
+
STDOUT
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "list keys showing the whole key hex with --long" do
|
|
67
|
+
stderr, stdout = execute("keys --long")
|
|
68
|
+
stderr.should == ""
|
|
69
|
+
stdout.should == <<-STDOUT
|
|
70
|
+
=== email@example.com Keys
|
|
71
|
+
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAp9AJD5QABmOcrkHm6SINuQkDefaR0MUrfgZ1Pxir3a4fM1fwa00dsUwbUaRuR7FEFD8n1E9WwDf8SwQTHtyZsJg09G9myNqUzkYXCmydN7oGr5IdVhRyv5ixcdiE0hj7dRnOJg2poSQ3Qi+Ka8SVJzF7nIw1YhuicHPSbNIFKi5s0D5a+nZb/E6MNGvhxoFCQX2IcNxaJMqhzy1ESwlixz45aT72mXYq0LIxTTpoTqma1HuKdRY8HxoREiivjmMQulYP+CxXFcMyV9kxTKIUZ/FXqlC6G5vSm3J4YScSatPOj9ID5HowpdlIx8F6y4p1/28r2tTl4CY40FFyoke4MQ== pedro@heroku
|
|
72
|
+
|
|
73
|
+
STDOUT
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
context("remove") do
|
|
79
|
+
|
|
80
|
+
context("success") do
|
|
81
|
+
|
|
82
|
+
before(:each) do
|
|
83
|
+
api.post_key(KEY)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "succeeds" do
|
|
87
|
+
stderr, stdout = execute("keys:remove pedro@heroku")
|
|
88
|
+
stderr.should == ""
|
|
89
|
+
stdout.should == <<-STDOUT
|
|
90
|
+
Removing pedro@heroku SSH key... done
|
|
91
|
+
STDOUT
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "displays an error if no key is specified" do
|
|
97
|
+
stderr, stdout = execute("keys:remove")
|
|
98
|
+
stderr.should == <<-STDERR
|
|
99
|
+
! Usage: heroku keys:remove KEY
|
|
100
|
+
! Must specify KEY to remove.
|
|
101
|
+
STDERR
|
|
102
|
+
stdout.should == ""
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context("clear") do
|
|
108
|
+
|
|
109
|
+
it "succeeds" do
|
|
110
|
+
stderr, stdout = execute("keys:clear")
|
|
111
|
+
stderr.should == ""
|
|
112
|
+
stdout.should == <<-STDOUT
|
|
113
|
+
Removing all SSH keys... done
|
|
114
|
+
STDOUT
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
require "heroku/command/labs"
|
|
4
|
+
|
|
5
|
+
module Heroku::Command
|
|
6
|
+
describe Labs do
|
|
7
|
+
|
|
8
|
+
before(:each) do
|
|
9
|
+
stub_core
|
|
10
|
+
api.post_app("name" => "myapp", "stack" => "cedar")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
after(:each) do
|
|
14
|
+
api.delete_app("myapp")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "lists available features" do
|
|
18
|
+
stderr, stdout = execute("labs:list")
|
|
19
|
+
stderr.should == ""
|
|
20
|
+
stdout.should == <<-STDOUT
|
|
21
|
+
=== App Available Features
|
|
22
|
+
sigterm-all: When stopping a dyno, send SIGTERM to all processes rather than only to the root process.
|
|
23
|
+
user_env_compile: Add user config vars to the environment during slug compilation
|
|
24
|
+
|
|
25
|
+
=== User Available Features
|
|
26
|
+
sumo-rankings: Heroku Sumo ranks and visualizes the scale of your app, and suggests the optimum combination of dynos and add-ons to take it to the next level.
|
|
27
|
+
|
|
28
|
+
STDOUT
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "lists enabled features" do
|
|
32
|
+
stub_core.list_features("myapp").returns([])
|
|
33
|
+
stderr, stdout = execute("labs")
|
|
34
|
+
stderr.should == ""
|
|
35
|
+
stdout.should == <<-STDOUT
|
|
36
|
+
=== myapp Enabled Features
|
|
37
|
+
sigterm-all: When stopping a dyno, send SIGTERM to all processes rather than only to the root process.
|
|
38
|
+
|
|
39
|
+
email@example.com has no enabled features.
|
|
40
|
+
STDOUT
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "displays details of a feature" do
|
|
44
|
+
stderr, stdout = execute("labs:info user_env_compile")
|
|
45
|
+
stderr.should == ""
|
|
46
|
+
stdout.should == <<-STDOUT
|
|
47
|
+
=== user_env_compile
|
|
48
|
+
Docs: http://devcenter.heroku.com/articles/labs-user-env-compile
|
|
49
|
+
Summary: Add user config vars to the environment during slug compilation
|
|
50
|
+
STDOUT
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "shows usage if no feature name is specified for info" do
|
|
54
|
+
stderr, stdout = execute("labs:info")
|
|
55
|
+
stderr.should == <<-STDERR
|
|
56
|
+
! Usage: heroku labs:info FEATURE
|
|
57
|
+
! Must specify FEATURE for info.
|
|
58
|
+
STDERR
|
|
59
|
+
stdout.should == ""
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "enables a feature" do
|
|
63
|
+
stderr, stdout = execute("labs:enable user_env_compile")
|
|
64
|
+
stderr.should == ""
|
|
65
|
+
stdout.should == <<-STDOUT
|
|
66
|
+
Enabling user_env_compile for myapp... done
|
|
67
|
+
WARNING: This feature is experimental and may change or be removed without notice.
|
|
68
|
+
For more information see: http://devcenter.heroku.com/articles/labs-user-env-compile
|
|
69
|
+
STDOUT
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "shows usage if no feature name is specified for enable" do
|
|
73
|
+
stderr, stdout = execute("labs:enable")
|
|
74
|
+
stderr.should == <<-STDERR
|
|
75
|
+
! Usage: heroku labs:enable FEATURE
|
|
76
|
+
! Must specify FEATURE to enable.
|
|
77
|
+
STDERR
|
|
78
|
+
stdout.should == ""
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "disables a feature" do
|
|
82
|
+
api.post_feature('user_env_compile', 'myapp')
|
|
83
|
+
stderr, stdout = execute("labs:disable user_env_compile")
|
|
84
|
+
stderr.should == ""
|
|
85
|
+
stdout.should == <<-STDOUT
|
|
86
|
+
Disabling user_env_compile for myapp... done
|
|
87
|
+
STDOUT
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "shows usage if no feature name is specified for disable" do
|
|
91
|
+
stderr, stdout = execute("labs:disable")
|
|
92
|
+
stderr.should == <<-STDERR
|
|
93
|
+
! Usage: heroku labs:disable FEATURE
|
|
94
|
+
! Must specify FEATURE to disable.
|
|
95
|
+
STDERR
|
|
96
|
+
stdout.should == ""
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|