2020-05-20 18:05:32 +02:00
/ *
Copyright ( c ) 2020 Docker Inc .
Permission is hereby granted , free of charge , to any person
obtaining a copy of this software and associated documentation
files ( the "Software" ) , to deal in the Software without
restriction , including without limitation the rights to use , copy ,
modify , merge , publish , distribute , sublicense , and / or sell copies
of the Software , and to permit persons to whom the Software is
furnished to do so , subject to the following conditions :
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software .
THE SOFTWARE IS PROVIDED "AS IS" , WITHOUT WARRANTY OF ANY KIND ,
EXPRESS OR IMPLIED ,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT .
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM ,
DAMAGES OR OTHER LIABILITY ,
WHETHER IN AN ACTION OF CONTRACT ,
TORT OR OTHERWISE ,
ARISING FROM , OUT OF OR IN CONNECTION WITH
THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE .
* /
2020-05-04 15:10:28 +02:00
package main
import (
2020-05-18 15:55:21 +02:00
"os"
2020-05-26 22:59:52 +02:00
"path/filepath"
2020-05-20 15:57:10 +02:00
"testing"
2020-05-04 15:10:28 +02:00
"time"
2020-05-06 15:28:03 +02:00
2020-05-27 18:39:17 +02:00
. "github.com/onsi/gomega"
"github.com/stretchr/testify/suite"
2020-05-26 23:34:38 +02:00
"gotest.tools/golden"
2020-05-13 07:52:43 +02:00
. "github.com/docker/api/tests/framework"
2020-05-04 15:10:28 +02:00
)
2020-05-20 15:57:10 +02:00
type E2eSuite struct {
Suite
}
2020-05-04 15:10:28 +02:00
2020-05-20 15:57:10 +02:00
func ( s * E2eSuite ) TestContextHelp ( ) {
2020-06-11 10:12:41 +02:00
output := s . NewDockerCommand ( "context" , "create" , "aci" , "--help" ) . ExecOrDie ( )
Expect ( output ) . To ( ContainSubstring ( "docker context create aci CONTEXT [flags]" ) )
Expect ( output ) . To ( ContainSubstring ( "--location" ) )
Expect ( output ) . To ( ContainSubstring ( "--subscription-id" ) )
Expect ( output ) . To ( ContainSubstring ( "--resource-group" ) )
2020-05-20 15:57:10 +02:00
}
2020-05-04 15:10:28 +02:00
2020-06-11 10:12:41 +02:00
func ( s * E2eSuite ) TestListAndShowDefaultContext ( ) {
output := s . NewDockerCommand ( "context" , "show" ) . ExecOrDie ( )
Expect ( output ) . To ( ContainSubstring ( "default" ) )
output = s . NewCommand ( "docker" , "context" , "ls" ) . ExecOrDie ( )
golden . Assert ( s . T ( ) , output , GoldenFile ( "ls-out-default" ) )
2020-05-20 15:57:10 +02:00
}
2020-05-04 15:10:28 +02:00
2020-06-11 10:12:41 +02:00
func ( s * E2eSuite ) TestCreateDockerContextAndListIt ( ) {
s . NewDockerCommand ( "context" , "create" , "test-docker" , "--from" , "default" ) . ExecOrDie ( )
output := s . NewCommand ( "docker" , "context" , "ls" ) . ExecOrDie ( )
golden . Assert ( s . T ( ) , output , GoldenFile ( "ls-out-test-docker" ) )
}
func ( s * E2eSuite ) TestInspectDefaultContext ( ) {
output := s . NewDockerCommand ( "context" , "inspect" , "default" ) . ExecOrDie ( )
Expect ( output ) . To ( ContainSubstring ( ` "Name": "default" ` ) )
2020-05-29 12:02:07 +02:00
}
2020-06-10 17:24:13 +02:00
func ( s * E2eSuite ) TestContextCreateParseErrorDoesNotDelegateToLegacy ( ) {
It ( "should dispay new cli error when parsing context create flags" , func ( ) {
2020-06-11 10:12:41 +02:00
_ , err := s . NewDockerCommand ( "context" , "create" , "aci" , "--subscription-id" , "titi" ) . Exec ( )
2020-06-10 17:24:13 +02:00
Expect ( err . Error ( ) ) . NotTo ( ContainSubstring ( "unknown flag" ) )
2020-06-11 10:12:41 +02:00
Expect ( err . Error ( ) ) . To ( ContainSubstring ( "accepts 1 arg(s), received 0" ) )
2020-06-10 17:24:13 +02:00
} )
}
2020-05-29 17:07:48 +02:00
func ( s * E2eSuite ) TestClassicLoginWithparameters ( ) {
output , err := s . NewDockerCommand ( "login" , "-u" , "nouser" , "-p" , "wrongpasword" ) . Exec ( )
Expect ( output ) . To ( ContainSubstring ( "Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password" ) )
Expect ( err ) . NotTo ( BeNil ( ) )
}
func ( s * E2eSuite ) TestClassicLogin ( ) {
output , err := s . NewDockerCommand ( "login" , "someregistry.docker.io" ) . Exec ( )
Expect ( output ) . To ( ContainSubstring ( "Cannot perform an interactive login from a non TTY device" ) )
Expect ( err ) . NotTo ( BeNil ( ) )
}
func ( s * E2eSuite ) TestCloudLogin ( ) {
output , err := s . NewDockerCommand ( "login" , "mycloudbackend" ) . Exec ( )
2020-05-22 13:38:30 +02:00
Expect ( output ) . To ( ContainSubstring ( "unknown backend type for cloud login: mycloudbackend" ) )
2020-05-29 17:07:48 +02:00
Expect ( err ) . NotTo ( BeNil ( ) )
}
2020-05-26 22:59:52 +02:00
func ( s * E2eSuite ) TestSetupError ( ) {
It ( "should display an error if cannot shell out to docker-classic" , func ( ) {
err := os . Setenv ( "PATH" , s . BinDir )
Expect ( err ) . To ( BeNil ( ) )
2020-06-08 16:50:47 +02:00
err = os . Remove ( filepath . Join ( s . BinDir , DockerClassicExecutable ( ) ) )
2020-05-26 22:59:52 +02:00
Expect ( err ) . To ( BeNil ( ) )
output , err := s . NewDockerCommand ( "ps" ) . Exec ( )
Expect ( output ) . To ( ContainSubstring ( "docker-classic" ) )
Expect ( output ) . To ( ContainSubstring ( "not found" ) )
Expect ( err ) . NotTo ( BeNil ( ) )
} )
}
2020-05-20 15:57:10 +02:00
func ( s * E2eSuite ) TestLegacy ( ) {
2020-05-04 15:10:28 +02:00
It ( "should list all legacy commands" , func ( ) {
2020-05-20 15:57:10 +02:00
output := s . NewDockerCommand ( "--help" ) . ExecOrDie ( )
2020-05-05 17:55:53 +02:00
Expect ( output ) . To ( ContainSubstring ( "swarm" ) )
2020-05-04 15:10:28 +02:00
} )
It ( "should execute legacy commands" , func ( ) {
2020-05-20 15:57:10 +02:00
output , _ := s . NewDockerCommand ( "swarm" , "join" ) . Exec ( )
2020-05-05 17:55:53 +02:00
Expect ( output ) . To ( ContainSubstring ( "\"docker swarm join\" requires exactly 1 argument." ) )
2020-05-04 15:10:28 +02:00
} )
2020-05-20 15:57:10 +02:00
It ( "should run local container in less than 10 secs" , func ( ) {
s . NewDockerCommand ( "pull" , "hello-world" ) . ExecOrDie ( )
2020-06-09 07:22:40 +02:00
output := s . NewDockerCommand ( "run" , "--rm" , "hello-world" ) . WithTimeout ( time . NewTimer ( 20 * time . Second ) . C ) . ExecOrDie ( )
2020-05-05 17:55:53 +02:00
Expect ( output ) . To ( ContainSubstring ( "Hello from Docker!" ) )
2020-05-04 15:10:28 +02:00
} )
2020-05-20 15:57:10 +02:00
}
2020-05-04 15:10:28 +02:00
2020-06-05 17:08:42 +02:00
func ( s * E2eSuite ) TestLeaveLegacyErrorMessagesUnchanged ( ) {
output , err := s . NewDockerCommand ( "foo" ) . Exec ( )
golden . Assert ( s . T ( ) , output , "unknown-foo-command.golden" )
Expect ( err ) . NotTo ( BeNil ( ) )
}
2020-06-05 17:30:27 +02:00
func ( s * E2eSuite ) TestDisplayFriendlyErrorMessageForLegacyCommands ( ) {
2020-06-11 10:12:41 +02:00
s . NewDockerCommand ( "context" , "create" , "example" , "test-example" ) . ExecOrDie ( )
2020-06-05 17:30:27 +02:00
output , err := s . NewDockerCommand ( "--context" , "test-example" , "images" ) . Exec ( )
Expect ( output ) . To ( Equal ( "Command \"images\" not available in current context (test-example), you can use the \"default\" context to run this command\n" ) )
Expect ( err ) . NotTo ( BeNil ( ) )
}
2020-06-12 17:54:14 +02:00
func ( s * E2eSuite ) TestDisplaysAdditionalLineInDockerVersion ( ) {
output := s . NewDockerCommand ( "version" ) . ExecOrDie ( )
2020-06-15 11:43:34 +02:00
Expect ( output ) . To ( ContainSubstring ( ` Azure integration 1.0 .0 - beta
2020-06-12 17:54:14 +02:00
Version : ` ) )
}
2020-05-20 15:57:10 +02:00
func ( s * E2eSuite ) TestMockBackend ( ) {
2020-05-04 15:10:28 +02:00
It ( "creates a new test context to hardcoded example backend" , func ( ) {
2020-06-11 10:12:41 +02:00
s . NewDockerCommand ( "context" , "create" , "example" , "test-example" ) . ExecOrDie ( )
2020-05-14 13:01:05 +02:00
// Expect(output).To(ContainSubstring("test-example context acitest created"))
2020-05-04 15:10:28 +02:00
} )
It ( "uses the test context" , func ( ) {
2020-05-20 15:57:10 +02:00
currentContext := s . NewDockerCommand ( "context" , "use" , "test-example" ) . ExecOrDie ( )
2020-05-05 17:55:53 +02:00
Expect ( currentContext ) . To ( ContainSubstring ( "test-example" ) )
2020-05-20 15:57:10 +02:00
output := s . NewDockerCommand ( "context" , "ls" ) . ExecOrDie ( )
2020-06-08 14:43:51 +02:00
golden . Assert ( s . T ( ) , output , GoldenFile ( "ls-out-test-example" ) )
2020-05-20 15:57:10 +02:00
output = s . NewDockerCommand ( "context" , "show" ) . ExecOrDie ( )
2020-05-18 13:57:38 +02:00
Expect ( output ) . To ( ContainSubstring ( "test-example" ) )
2020-05-04 15:10:28 +02:00
} )
It ( "can run ps command" , func ( ) {
2020-05-20 15:57:10 +02:00
output := s . NewDockerCommand ( "ps" ) . ExecOrDie ( )
2020-05-05 17:55:53 +02:00
lines := Lines ( output )
Expect ( len ( lines ) ) . To ( Equal ( 3 ) )
2020-05-15 17:52:19 +02:00
Expect ( lines [ 2 ] ) . To ( ContainSubstring ( "1234 alpine" ) )
2020-05-04 15:10:28 +02:00
} )
2020-05-06 09:37:52 +02:00
It ( "can run quiet ps command" , func ( ) {
2020-05-20 15:57:10 +02:00
output := s . NewDockerCommand ( "ps" , "-q" ) . ExecOrDie ( )
2020-05-05 17:55:53 +02:00
lines := Lines ( output )
Expect ( len ( lines ) ) . To ( Equal ( 2 ) )
Expect ( lines [ 0 ] ) . To ( Equal ( "id" ) )
Expect ( lines [ 1 ] ) . To ( Equal ( "1234" ) )
2020-05-06 09:37:52 +02:00
} )
2020-05-18 14:16:32 +02:00
It ( "can run ps command with all " , func ( ) {
2020-05-20 15:57:10 +02:00
output := s . NewDockerCommand ( "ps" , "-q" , "--all" ) . ExecOrDie ( )
2020-05-18 14:16:32 +02:00
lines := Lines ( output )
Expect ( len ( lines ) ) . To ( Equal ( 3 ) )
Expect ( lines [ 0 ] ) . To ( Equal ( "id" ) )
Expect ( lines [ 1 ] ) . To ( Equal ( "1234" ) )
Expect ( lines [ 2 ] ) . To ( Equal ( "stopped" ) )
} )
2020-05-04 15:10:28 +02:00
It ( "can run 'run' command" , func ( ) {
2020-05-20 15:57:10 +02:00
output := s . NewDockerCommand ( "run" , "nginx" , "-p" , "80:80" ) . ExecOrDie ( )
2020-05-05 17:55:53 +02:00
Expect ( output ) . To ( ContainSubstring ( "Running container \"nginx\" with name" ) )
2020-05-04 15:10:28 +02:00
} )
2020-05-20 15:57:10 +02:00
}
2020-05-18 15:55:21 +02:00
2020-05-20 15:57:10 +02:00
func TestE2e ( t * testing . T ) {
suite . Run ( t , new ( E2eSuite ) )
}