* configure MySQL to use tmpfs

* simplify use of COMPOSE_PROJECT_NAME, and set envs vs. overriding config.json, fix error output, --no-ansi

* cmd/mattermost/commands/*_test.go: ignore MM_SQLSETTINGS_DATASOURCE from the env

* clean up exit 1 semantics
Этот коммит содержится в:
Jesse Hallam
2018-12-13 16:29:47 -05:00
коммит произвёл GitHub
родитель 1f197d7c55
Коммит 86fa3866c1
5 изменённых файлов: 100 добавлений и 83 удалений

Просмотреть файл

@@ -14,7 +14,7 @@ pipeline {
options { buildDiscarder(logRotator(numToKeepStr: '3')) } options { buildDiscarder(logRotator(numToKeepStr: '3')) }
environment { environment {
DCNAME = "${rnd}" COMPOSE_PROJECT_NAME="${rnd}-${env.BUILD_NUMBER}"
} }
stages { stages {
@@ -54,13 +54,13 @@ pipeline {
ansiColor('xterm') { ansiColor('xterm') {
sh """ sh """
#!/bin/bash -ex #!/bin/bash -ex
git checkout $env.BRANCH_NAME || git checkout $env.CHANGE_BRANCH || git checkout $env.GIT_BRANCH || git checkout master || echo 1 git checkout $env.BRANCH_NAME || git checkout $env.CHANGE_BRANCH || git checkout $env.GIT_BRANCH || git checkout master
rm -rf ./dist rm -rf ./dist
export WEBAPP_GIT_COMMIT=\$(git rev-parse HEAD) export WEBAPP_GIT_COMMIT=\$(git rev-parse HEAD)
echo Webapp Commit: \${WEBAPP_GIT_COMMIT} echo Webapp Commit: \${WEBAPP_GIT_COMMIT}
curl -f -o ./dist.tar.gz https://releases.mattermost.com/mattermost-webapp/commit/\${WEBAPP_GIT_COMMIT}/mattermost-webapp.tar.gz && mkdir ./dist && tar -xvf ./dist.tar.gz -C ./dist --strip-components=1 || make node_modules test build || exit 1 curl -f -o ./dist.tar.gz https://releases.mattermost.com/mattermost-webapp/commit/\${WEBAPP_GIT_COMMIT}/mattermost-webapp.tar.gz && mkdir ./dist && tar -xvf ./dist.tar.gz -C ./dist --strip-components=1 || make node_modules test build
""" """
} }
} }
@@ -79,9 +79,9 @@ pipeline {
sh """ sh """
cd /go/src/github.com/mattermost/mattermost-server cd /go/src/github.com/mattermost/mattermost-server
mv config/default.json config/config.json || echo "" mv config/default.json config/config.json || echo ""
make check-style BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' || exit 1 make check-style BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}'
make build BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' || exit 1 make build BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}'
make package BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' || exit 1 make package BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}'
""" """
} }
} }
@@ -101,41 +101,38 @@ pipeline {
CI_INBUCKET_SMTP_PORT = "10025" CI_INBUCKET_SMTP_PORT = "10025"
CI_LDAP_HOST = "openldap" CI_LDAP_HOST = "openldap"
IS_CI = true IS_CI = true
MM_SQLSETTINGS_DATASOURCE = "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8"
MM_EMAILSETTINGS_SMTPSERVER = "inbucket"
MM_EMAILSETTINGS_SMTPPORT = "10025"
MM_ELASTICSEARCHSETTINGS_CONNECTIONURL = "http://elasticsearch:9200"
} }
steps { steps {
dir('src/github.com/mattermost/mattermost-server/build') { dir('src/github.com/mattermost/mattermost-server/build') {
ansiColor('xterm') { ansiColor('xterm') {
sh """ sh """
COMPOSE_PROJECT_NAME=${DCNAME}-${env.BUILD_NUMBER} docker-compose run --rm start_dependencies docker-compose --no-ansi run --rm start_dependencies
COMPOSE_PROJECT_NAME=${DCNAME}-${env.BUILD_NUMBER} docker-compose up -d mysql postgres minio inbucket openldap elasticsearch redis docker-compose --no-ansi ps
docker ps docker-compose --no-ansi exec -T openldap bash -c 'echo -e "dn: ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: organizationalunit" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest';
docker-compose --no-ansi exec -T openldap bash -c 'echo -e "dn: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test1\nmail: success+testone@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest';
docker exec -t openldap-${DCNAME}-${env.BUILD_NUMBER} bash -c 'echo -e "dn: ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: organizationalunit" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'; docker-compose --no-ansi exec -T openldap bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" -w mostest';
docker exec -t openldap-${DCNAME}-${env.BUILD_NUMBER} bash -c 'echo -e "dn: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test1\nmail: success+testone@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'; docker-compose --no-ansi exec -T openldap bash -c 'echo -e "dn: uid=test.two,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test2\nmail: success+testtwo@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest';
docker exec -t openldap-${DCNAME}-${env.BUILD_NUMBER} bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" -w mostest'; docker-compose --no-ansi exec -T openldap bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.two,ou=testusers,dc=mm,dc=test,dc=com" -w mostest';
docker exec -t openldap-${DCNAME}-${env.BUILD_NUMBER} bash -c 'echo -e "dn: uid=test.two,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test2\nmail: success+testtwo@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'; docker-compose --no-ansi exec -T openldap bash -c 'echo -e "dn: cn=tgroup,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: groupOfUniqueNames\nuniqueMember: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest';
docker exec -t openldap-${DCNAME}-${env.BUILD_NUMBER} bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.two,ou=testusers,dc=mm,dc=test,dc=com" -w mostest';
docker exec -t openldap-${DCNAME}-${env.BUILD_NUMBER} bash -c 'echo -e "dn: cn=tgroup,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: groupOfUniqueNames\nuniqueMember: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest';
""" """
} }
} }
withDockerContainer(args: "-u root --privileged --net ${DCNAME}-${BUILD_NUMBER}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:dec-7-2018') { withDockerContainer(args: "-u root --privileged --net ${COMPOSE_PROJECT_NAME}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:dec-7-2018') {
ansiColor('xterm') { ansiColor('xterm') {
sh """ sh """
cd /go/src/github.com/mattermost/mattermost-server cd /go/src/github.com/mattermost/mattermost-server
sed -i'.bak' 's|mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8|mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8|g' config/config.json;
sed -i'.bak' 's|"SMTPServer": "dockerhost",|"SMTPServer": "inbucket",|g' config/config.json;
sed -i'.bak' 's|"SMTPPort": "2500",|"SMTPPort": "10025",|g' config/config.json;
sed -i'.bak' 's|"ConnectionUrl": "http://dockerhost:9200",|"ConnectionUrl": "http://elasticsearch:9200",|g' config/config.json;
mkdir -p client/plugins mkdir -p client/plugins
cat config/config.json cat config/config.json
make test-server BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' TESTFLAGS= TESTFLAGSEE= || exit 1 make test-server BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' TESTFLAGS= TESTFLAGSEE=
""" """
} }
} }
@@ -234,7 +231,7 @@ pipeline {
dir('src/github.com/mattermost/mattermost-server/build') { dir('src/github.com/mattermost/mattermost-server/build') {
ansiColor('xterm') { ansiColor('xterm') {
sh """ sh """
COMPOSE_PROJECT_NAME=${DCNAME}-${env.BUILD_NUMBER} docker-compose down -v docker-compose --no-ansi down -v
""" """
} }
} }

Просмотреть файл

@@ -3,7 +3,6 @@ services:
mysql: mysql:
image: "mysql:5.7" image: "mysql:5.7"
restart: always restart: always
container_name: mysql-$DCNAME-$BUILD_NUMBER
networks: networks:
- mm-test - mm-test
environment: environment:
@@ -12,20 +11,22 @@ services:
MYSQL_PASSWORD: mostest MYSQL_PASSWORD: mostest
MYSQL_USER: mmuser MYSQL_USER: mmuser
MYSQL_DATABASE: mattermost_test MYSQL_DATABASE: mattermost_test
tmpfs: /var/lib/mysql
volumes:
- "./docker/mysql.conf.d:/etc/mysql/conf.d"
postgres: postgres:
image: "postgres:9.4" image: "postgres:9.4"
restart: always restart: always
container_name: postgres-$DCNAME-$BUILD_NUMBER
networks: networks:
- mm-test - mm-test
environment: environment:
POSTGRES_USER: mmuser POSTGRES_USER: mmuser
POSTGRES_PASSWORD: mostest POSTGRES_PASSWORD: mostest
POSTGRES_DB: mattermost_test POSTGRES_DB: mattermost_test
tmpfs: /var/lib/postgresql/data
minio: minio:
image: "minio/minio:RELEASE.2018-05-25T19-49-13Z" image: "minio/minio:RELEASE.2018-05-25T19-49-13Z"
command: "server /data" command: "server /data"
container_name: minio-$DCNAME-$BUILD_NUMBER
networks: networks:
- mm-test - mm-test
environment: environment:
@@ -34,13 +35,11 @@ services:
inbucket: inbucket:
image: "jhillyerd/inbucket:release-1.2.0" image: "jhillyerd/inbucket:release-1.2.0"
restart: always restart: always
container_name: inbucket-$DCNAME-$BUILD_NUMBER
networks: networks:
- mm-test - mm-test
openldap: openldap:
image: "osixia/openldap:1.1.6" image: "osixia/openldap:1.1.6"
restart: always restart: always
container_name: openldap-$DCNAME-$BUILD_NUMBER
networks: networks:
- mm-test - mm-test
environment: environment:
@@ -50,7 +49,6 @@ services:
LDAP_ADMIN_PASSWORD: "mostest" LDAP_ADMIN_PASSWORD: "mostest"
elasticsearch: elasticsearch:
image: "mattermost/mattermost-elasticsearch-docker:6.5.1" image: "mattermost/mattermost-elasticsearch-docker:6.5.1"
container_name: elasticsearch-$DCNAME-$BUILD_NUMBER
networks: networks:
- mm-test - mm-test
environment: environment:
@@ -61,7 +59,6 @@ services:
image: redis image: redis
networks: networks:
- mm-test - mm-test
container_name: redis-$DCNAME-$BUILD_NUMBER
start_dependencies: start_dependencies:
image: mattermost/mattermost-wait-for-dep:latest image: mattermost/mattermost-wait-for-dep:latest

19
build/docker/mysql.conf.d/custom.cnf Обычный файл
Просмотреть файл

@@ -0,0 +1,19 @@
[mysqld]
bind-address = 0.0.0.0
log-output = NONE
slow-query-log = 0
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = nosync
innodb_lock_wait_timeout = 50
innodb_log_buffer_size = 3M
innodb_buffer_pool_size = 180M
max_connect_errors = 1000000
max_connections = 900
character-set-server = utf8
sql_mode = ""
innodb = FORCE
default-storage-engine = InnoDB
max_allowed_packet = 256M

Просмотреть файл

@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
export DCNAME=localdev export COMPOSE_PROJECT_NAME=localdev
export BUILD_NUMBER=null
local_cmdname=${0##*/} local_cmdname=${0##*/}
usage() usage()
@@ -15,50 +14,41 @@ USAGE
up() up()
{ {
COMPOSE_PROJECT_NAME=$DCNAME-$BUILD_NUMBER docker-compose run --rm start_dependencies docker-compose run --rm start_dependencies
COMPOSE_PROJECT_NAME=$DCNAME-$BUILD_NUMBER docker-compose up -d mysql postgres minio inbucket openldap elasticsearch redis
docker exec -t openldap-$DCNAME-$BUILD_NUMBER bash -c 'echo -e "dn: ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: organizationalunit" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest' docker-compose exec openldap bash -c 'echo -e "dn: ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: organizationalunit" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'
docker exec -t openldap-$DCNAME-$BUILD_NUMBER bash -c 'echo -e "dn: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test1\nmail: success+testone@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest' docker-compose exec openldap bash -c 'echo -e "dn: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test1\nmail: success+testone@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'
docker exec -t openldap-$DCNAME-$BUILD_NUMBER bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" -w mostest' docker-compose exec openldap bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" -w mostest'
docker exec -t openldap-$DCNAME-$BUILD_NUMBER bash -c 'echo -e "dn: uid=test.two,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test2\nmail: success+testtwo@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest' docker-compose exec openldap bash -c 'echo -e "dn: uid=test.two,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test2\nmail: success+testtwo@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'
docker exec -t openldap-$DCNAME-$BUILD_NUMBER bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.two,ou=testusers,dc=mm,dc=test,dc=com" -w mostest' docker-compose exec openldap bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.two,ou=testusers,dc=mm,dc=test,dc=com" -w mostest'
docker exec -t openldap-$DCNAME-$BUILD_NUMBER bash -c 'echo -e "dn: cn=tgroup,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: groupOfUniqueNames\nuniqueMember: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest' docker-compose exec openldap bash -c 'echo -e "dn: cn=tgroup,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: groupOfUniqueNames\nuniqueMember: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'
echo "Changing the config.json" docker run -it -u root \
sed -i'.bak' 's|mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8|mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8|g' $GOPATH/src/github.com/mattermost/mattermost-server/config/config.json --privileged \
sed -i'.bak' 's|"SMTPServer": "dockerhost",|"SMTPServer": "inbucket",|g' $GOPATH/src/github.com/mattermost/mattermost-server/config/config.json -v $GOPATH:/go \
sed -i'.bak' 's|"SMTPPort": "2500",|"SMTPPort": "10025",|g' $GOPATH/src/github.com/mattermost/mattermost-server/config/config.json -w /go/src/github.com/mattermost/mattermost-server/ \
sed -i'.bak' 's|"ConnectionUrl": "http://dockerhost:9200",|"ConnectionUrl": "http://elasticsearch:9200",|g' $GOPATH/src/github.com/mattermost/mattermost-server/config/config.json --net ${COMPOSE_PROJECT_NAME}_mm-test \
-e GOPATH="/go" \
docker run -it -u root \ -e TEST_DATABASE_MYSQL_DSN="mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s" \
--privileged \ -e TEST_DATABASE_POSTGRESQL_DSN="postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" \
-v $GOPATH:/go \ -e TEST_DATABASE_MYSQL_ROOT_PASSWD="mostest" \
-w /go/src/github.com/mattermost/mattermost-server/ \ -e CI_INBUCKET_HOST="inbucket" \
--net $DCNAME-$BUILD_NUMBER\_mm-test \ -e CI_MINIO_HOST="minio" \
-e GOPATH="/go" \ -e CI_INBUCKET_PORT="10080" \
-e TEST_DATABASE_MYSQL_DSN="mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s" \ -e CI_MINIO_PORT="9000" \
-e TEST_DATABASE_POSTGRESQL_DSN="postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" \ -e CI_INBUCKET_SMTP_PORT="10025" \
-e TEST_DATABASE_MYSQL_ROOT_PASSWD="mostest" \ -e CI_LDAP_HOST="openldap" \
-e CI_INBUCKET_HOST="inbucket" \ -e IS_CI=true \
-e CI_MINIO_HOST="minio" \ -e MM_SQLSETTINGS_DATASOURCE="mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8" \
-e CI_INBUCKET_PORT="10080" \ -e MM_EMAILSETTINGS_SMTPSERVER="inbucket" \
-e CI_MINIO_PORT="9000" \ -e MM_EMAILSETTINGS_SMTPPORT="10025" \
-e CI_INBUCKET_SMTP_PORT="10025" \ -e MM_ELASTICSEARCHSETTINGS_CONNECTIONURL="http://elasticsearch:9200" \
-e CI_LDAP_HOST="openldap" \ mattermost/mattermost-build-server:dec-7-2018 /bin/bash
-e IS_CI=true \
mattermost/mattermost-build-server:dec-7-2018 /bin/bash
} }
down() down()
{ {
COMPOSE_PROJECT_NAME=$DCNAME-$BUILD_NUMBER docker-compose down docker-compose down
echo "Reverting the changes in the config.json"
sed -i'.bak' 's|mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8|mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8|g' $GOPATH/src/github.com/mattermost/mattermost-server/config/config.json
sed -i'.bak' 's|"SMTPServer": "inbucket",|"SMTPServer": "dockerhost",|g' $GOPATH/src/github.com/mattermost/mattermost-server/config/config.json
sed -i'.bak' 's|"SMTPPort": "10025",|"SMTPPort": "2500",|g' $GOPATH/src/github.com/mattermost/mattermost-server/config/config.json
sed -i'.bak' 's|"ConnectionUrl": "http://elasticsearch:9200",|"ConnectionUrl": "http://dockerhost:9200",|g' $GOPATH/src/github.com/mattermost/mattermost-server/config/config.json
} }
# process arguments # process arguments
@@ -70,16 +60,19 @@ do
up up
break break
;; ;;
down) down)
echo "Stopping Containers" echo "Stopping Containers"
down down
break break
;; ;;
--help) --help)
usage usage
;; ;;
*) *)
echoerr "Unknown argument: $1" echo "Unknown argument: $1" >&2
usage usage
;; ;;
esac esac

Просмотреть файл

@@ -132,28 +132,39 @@ func (h *testHelper) execArgs(t *testing.T, args []string) []string {
return ret return ret
} }
// CheckCommand invokes the test binary, returning the output modified for assertion testing. func (h *testHelper) cmd(t *testing.T, args []string) *exec.Cmd {
func (h *testHelper) CheckCommand(t *testing.T, args ...string) string {
path, err := os.Executable() path, err := os.Executable()
require.NoError(t, err) require.NoError(t, err)
output, err := exec.Command(path, h.execArgs(t, args)...).CombinedOutput() cmd := exec.Command(path, h.execArgs(t, args)...)
cmd.Env = []string{}
for _, env := range os.Environ() {
// Ignore MM_SQLSETTINGS_DATASOURCE from the environment, since we override.
if strings.HasPrefix(env, "MM_SQLSETTINGS_DATASOURCE=") {
continue
}
cmd.Env = append(cmd.Env, env)
}
return cmd
}
// CheckCommand invokes the test binary, returning the output modified for assertion testing.
func (h *testHelper) CheckCommand(t *testing.T, args ...string) string {
output, err := h.cmd(t, args).CombinedOutput()
require.NoError(t, err, string(output)) require.NoError(t, err, string(output))
return strings.TrimSpace(strings.TrimSuffix(strings.TrimSpace(string(output)), "PASS")) return strings.TrimSpace(strings.TrimSuffix(strings.TrimSpace(string(output)), "PASS"))
} }
// RunCommand invokes the test binary, returning only any error. // RunCommand invokes the test binary, returning only any error.
func (h *testHelper) RunCommand(t *testing.T, args ...string) error { func (h *testHelper) RunCommand(t *testing.T, args ...string) error {
path, err := os.Executable() return h.cmd(t, args).Run()
require.NoError(t, err)
return exec.Command(path, h.execArgs(t, args)...).Run()
} }
// RunCommandWithOutput is a variant of RunCommand that returns the unmodified output and any error. // RunCommandWithOutput is a variant of RunCommand that returns the unmodified output and any error.
func (h *testHelper) RunCommandWithOutput(t *testing.T, args ...string) (string, error) { func (h *testHelper) RunCommandWithOutput(t *testing.T, args ...string) (string, error) {
path, err := os.Executable() cmd := h.cmd(t, args)
require.NoError(t, err)
cmd := exec.Command(path, h.execArgs(t, args)...)
var buf bytes.Buffer var buf bytes.Buffer
reader, writer := io.Pipe() reader, writer := io.Pipe()
@@ -166,7 +177,7 @@ func (h *testHelper) RunCommandWithOutput(t *testing.T, args ...string) (string,
close(done) close(done)
}() }()
err = cmd.Run() err := cmd.Run()
writer.Close() writer.Close()
<-done <-done