github.com/mweagle/Sparta@v1.15.0/docker/docker_test.go (about)

     1  package docker
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"os/exec"
     7  	"strings"
     8  	"testing"
     9  
    10  	sparta "github.com/mweagle/Sparta"
    11  	"github.com/mweagle/Sparta/system"
    12  )
    13  
    14  func TestLogin(t *testing.T) {
    15  	logger, _ := sparta.NewLogger("info")
    16  
    17  	// If docker -v doesn't work, then login definitely won't
    18  	dockerVersionCmd := exec.Command("docker", "-v")
    19  	dockerVersionCmdErr := system.RunOSCommand(dockerVersionCmd, logger)
    20  	if dockerVersionCmdErr != nil {
    21  		t.Logf("WARNING: failed to execute `docker -v` as prerequisite for testing STDIN password")
    22  		return
    23  	}
    24  	// Don't supply password on command line
    25  
    26  	dockerLoginCmd := exec.Command("docker",
    27  		"login",
    28  		"-u",
    29  		"mweagle",
    30  		"--password-stdin")
    31  	dockerLoginCmd.Stdout = os.Stdout
    32  	dockerLoginCmd.Stdin = bytes.NewReader([]byte("0AA421A3-931B-4985-8E99-9F5432A2BB58\n"))
    33  	dockerLoginCmd.Stderr = os.Stderr
    34  	dockerLoginCmdErr := system.RunOSCommand(dockerLoginCmd, logger)
    35  	if dockerLoginCmdErr != nil {
    36  		if strings.Contains(dockerLoginCmdErr.Error(), "Cannot perform an interactive login") {
    37  			// The stdin write failed...
    38  			t.Fatalf("Failed to write password to STDIN")
    39  		} else if strings.Contains(dockerLoginCmdErr.Error(), "unauthorized: incorrect username or password") {
    40  			t.Logf("Expected authorization rejection detected")
    41  		}
    42  	} else {
    43  		// This should never happen
    44  		t.Fatalf("Docker login with invalid credentials")
    45  	}
    46  }