pogo 2.31.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|