2018-07-11 14:31:27 +00:00
package network // import "github.com/docker/docker/integration/network"
import (
"bytes"
"context"
2018-11-05 13:50:33 +00:00
"net/http"
2018-07-11 14:31:27 +00:00
"os/exec"
"strings"
"testing"
"github.com/docker/docker/api/types"
"github.com/docker/docker/integration/internal/container"
"github.com/docker/docker/internal/test/daemon"
2018-11-05 13:50:33 +00:00
"github.com/docker/docker/internal/test/request"
2018-07-11 14:31:27 +00:00
"gotest.tools/assert"
is "gotest.tools/assert/cmp"
"gotest.tools/skip"
)
func TestRunContainerWithBridgeNone ( t * testing . T ) {
skip . If ( t , testEnv . IsRemoteDaemon , "cannot start daemon on remote test run" )
skip . If ( t , testEnv . DaemonInfo . OSType != "linux" )
skip . If ( t , IsUserNamespace ( ) )
d := daemon . New ( t )
d . StartWithBusybox ( t , "-b" , "none" )
defer d . Stop ( t )
client , err := d . NewClient ( )
assert . Check ( t , err , "error creating client" )
ctx := context . Background ( )
id1 := container . Run ( t , ctx , client )
defer client . ContainerRemove ( ctx , id1 , types . ContainerRemoveOptions { Force : true } )
result , err := container . Exec ( ctx , client , id1 , [ ] string { "ip" , "l" } )
assert . NilError ( t , err )
assert . Check ( t , is . Equal ( false , strings . Contains ( result . Combined ( ) , "eth0" ) ) , "There shouldn't be eth0 in container in default(bridge) mode when bridge network is disabled" )
id2 := container . Run ( t , ctx , client , container . WithNetworkMode ( "bridge" ) )
defer client . ContainerRemove ( ctx , id2 , types . ContainerRemoveOptions { Force : true } )
result , err = container . Exec ( ctx , client , id2 , [ ] string { "ip" , "l" } )
assert . NilError ( t , err )
assert . Check ( t , is . Equal ( false , strings . Contains ( result . Combined ( ) , "eth0" ) ) , "There shouldn't be eth0 in container in bridge mode when bridge network is disabled" )
nsCommand := "ls -l /proc/self/ns/net | awk -F '->' '{print $2}'"
cmd := exec . Command ( "sh" , "-c" , nsCommand )
stdout := bytes . NewBuffer ( nil )
cmd . Stdout = stdout
err = cmd . Run ( )
assert . NilError ( t , err , "Failed to get current process network namespace: %+v" , err )
id3 := container . Run ( t , ctx , client , container . WithNetworkMode ( "host" ) )
defer client . ContainerRemove ( ctx , id3 , types . ContainerRemoveOptions { Force : true } )
result , err = container . Exec ( ctx , client , id3 , [ ] string { "sh" , "-c" , nsCommand } )
assert . NilError ( t , err )
assert . Check ( t , is . Equal ( stdout . String ( ) , result . Combined ( ) ) , "The network namspace of container should be the same with host when --net=host and bridge network is disabled" )
}
2018-11-05 13:50:33 +00:00
func TestNetworkInvalidJSON ( t * testing . T ) {
defer setupTest ( t ) ( )
endpoints := [ ] string {
"/networks/create" ,
"/networks/bridge/connect" ,
"/networks/bridge/disconnect" ,
}
for _ , ep := range endpoints {
t . Run ( ep , func ( t * testing . T ) {
t . Parallel ( )
res , body , err := request . Post ( ep , request . RawString ( "{invalid json" ) , request . JSON )
assert . NilError ( t , err )
assert . Equal ( t , res . StatusCode , http . StatusBadRequest )
buf , err := request . ReadBody ( body )
assert . NilError ( t , err )
assert . Check ( t , is . Contains ( string ( buf ) , "invalid character 'i' looking for beginning of object key string" ) )
res , body , err = request . Post ( ep , request . JSON )
assert . NilError ( t , err )
assert . Equal ( t , res . StatusCode , http . StatusBadRequest )
buf , err = request . ReadBody ( body )
assert . NilError ( t , err )
assert . Check ( t , is . Contains ( string ( buf ) , "got EOF while reading request body" ) )
} )
}
}