Skip to content
This repository was archived by the owner on Nov 24, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
f83b72a
initial attempt at integration testing
ocket8888 Aug 13, 2020
cbac849
Added db upgrades and actual test running
ocket8888 Aug 13, 2020
ec929c6
Fix bad job names
ocket8888 Aug 13, 2020
2cff83e
Fix postgres service version
ocket8888 Aug 13, 2020
d64a783
Fix install command
ocket8888 Aug 13, 2020
4247cdb
Fix install command
ocket8888 Aug 13, 2020
2dbc48a
Fix install command
ocket8888 Aug 13, 2020
cce4a3e
Add 'git'
ocket8888 Aug 13, 2020
5d04957
Add 'gcc'
ocket8888 Aug 13, 2020
cdf613b
Switch to ubuntu
ocket8888 Aug 13, 2020
1c7b48f
Forgot 'install'
ocket8888 Aug 13, 2020
78c90bf
Add echoing steps to entrypoint
ocket8888 Aug 13, 2020
e08b8c2
Fix db execution path
ocket8888 Aug 13, 2020
8fc90ad
Move goose into PATH
ocket8888 Aug 13, 2020
7a98504
use localhost instead of IP
ocket8888 Aug 13, 2020
177e4d5
I'm gonna try something weird
ocket8888 Aug 13, 2020
466c2e0
Fix dbname
ocket8888 Aug 13, 2020
5a65105
Change command from upgrade to reset
ocket8888 Aug 13, 2020
1d6b9c3
Install postgresql client
ocket8888 Aug 13, 2020
65f6de3
Install postgresql client
ocket8888 Aug 13, 2020
646e39a
wat
ocket8888 Aug 13, 2020
25ee0c6
Why can't I install postgresql-client???
ocket8888 Aug 13, 2020
e405915
Refine package name
ocket8888 Aug 13, 2020
9449fac
Forgot a space
ocket8888 Aug 13, 2020
302f1fd
Calling goose manually
ocket8888 Aug 13, 2020
d9e8814
Fix db order of operations
ocket8888 Aug 13, 2020
5d2f902
Add hand-made cert and key
ocket8888 Aug 13, 2020
ab35d45
fix path to go binary
ocket8888 Aug 13, 2020
168d912
fix path to go binary - but actually
ocket8888 Aug 13, 2020
dce08a6
fix configuration file name
ocket8888 Aug 13, 2020
9630642
remove unused code
ocket8888 Aug 13, 2020
94eacb1
Add running v2 and v3 tests
ocket8888 Aug 13, 2020
0df31d8
Fix if/then syntax
ocket8888 Aug 13, 2020
6a63efd
Remove echoing and errexit
ocket8888 Aug 14, 2020
0b033ab
fix path to logfiles
ocket8888 Aug 14, 2020
e9b369f
shorten logs
ocket8888 Aug 14, 2020
91effda
Add noPerl and noISO to testing configuration
ocket8888 Aug 14, 2020
c2083b8
Fix no closing "
ocket8888 Aug 14, 2020
5d68657
Add missed Perl-dependent tests
ocket8888 Aug 14, 2020
919564a
Remove extraneous tests
ocket8888 Aug 14, 2020
eee25b8
Remove unused dependency, add path matching
ocket8888 Aug 14, 2020
6a3aa3f
Fix removing non-existent file
ocket8888 Aug 14, 2020
5dd3e8f
Move configuration files out into actual files
ocket8888 Aug 17, 2020
a654d2f
Merge branch 'ciab-less-tests' of github.com:ocket8888/trafficcontrol…
ocket8888 Aug 17, 2020
69c12bb
Fix package name
ocket8888 Aug 17, 2020
89a5c18
Move different versions into different steps
ocket8888 Aug 17, 2020
42270c4
Make API v2 and v3 tests always run even if earlier versions failed
ocket8888 Aug 17, 2020
e797d49
Fix 'always' syntax
ocket8888 Aug 17, 2020
951d171
Add input to action YML
ocket8888 Aug 17, 2020
90b12bc
Move todb initialization into its own action
ocket8888 Aug 17, 2020
3375e3e
Fix package name
ocket8888 Aug 17, 2020
5a07100
Add missing packages
ocket8888 Aug 17, 2020
97c1916
Run v2 and v3 only if db initialization succeeds
ocket8888 Aug 17, 2020
20ae173
Alpine doesn't have stdio, so I'm using buster
ocket8888 Aug 17, 2020
2add9e5
Alpine doesn't have stdio, so I'm using buster
ocket8888 Aug 17, 2020
071ec24
Remove unnecessary 'go get'
ocket8888 Aug 17, 2020
98f10b7
Add always() to later API version test conditionals
ocket8888 Aug 18, 2020
c72acee
Try to switch back to Alpine
ocket8888 Aug 18, 2020
a3d93f2
Fix apk command
ocket8888 Aug 18, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/actions/to-integration-tests/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

FROM golang:1.14.2-alpine

ENV CGO_ENABLED=0
RUN apk add --no-cache gettext git

COPY entrypoint.sh database.json traffic-ops-test.json cdn.json /
RUN chmod a+x /entrypoint.sh

ENTRYPOINT /entrypoint.sh
60 changes: 60 additions & 0 deletions .github/actions/to-integration-tests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->

# to-integration-tests Docker action
This action runs the Traffic Ops Go client integration tests with the Traffic
Ops API.

## Inputs

### `version`
**Required** Major API version to test e.g. 1, 2, 3 etc.

## Outputs

### `exit-code`
1 if the Go program(s) could be built successfully.

## Example usage
```yaml
jobs:
tests:
runs-on: ubuntu-latest

services:
postgres:
image: postgres:11.9
env:
POSTGRES_USER: traffic_ops
POSTGRES_PASSWORD: twelve
POSTGRES_DB: traffic_ops
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

steps:
- name: Checkout
uses: actions/checkout@master
- name: initialize database
uses: ./.github/actions/todb-init
- name: Run API v5 tests
uses: ./.github/actions/to-integration-tests
with:
version: 5
```
28 changes: 28 additions & 0 deletions .github/actions/to-integration-tests/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

name: 'to-integration-tests'
description: 'Runs Traffic Ops Go client/API integration tests'
inputs:
version:
description: 'Version of Traffic Ops API against which to run tests, e.g. 1, 2, 3, etc.'
required: true
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.version }}
51 changes: 51 additions & 0 deletions .github/actions/to-integration-tests/cdn.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
"hypnotoad" : {
"listen" : [
"https://not-a-real-host.test:1?cert=$PWD/localhost.crt&key=$PWD/localhost.key&verify=0x00&ciphers=AES128-GCM-SHA256:HIGH:!RC4:!MD5:!aNULL:!EDH:!ED"
],
"user" : "trafops",
"group" : "trafops",
"heartbeat_timeout" : 20,
"pid_file" : "/var/run/traffic_ops.pid",
"workers" : 12
},
"use_ims": true,
"traffic_ops_golang" : {
"insecure": true,
"port" : "6443",
"log_location_error": "stderr",
"log_location_warning": "stderr",
"log_location_info": null,
"log_location_debug": null,
"log_location_event": null,
"max_db_connections": 20,
"db_conn_max_lifetime_seconds": 60,
"db_query_timeout_seconds": 20,
"supported_ds_metrics": [ "kbps", "tps_total", "tps_2xx", "tps_3xx", "tps_4xx", "tps_5xx" ]
},
"cors" : {
"access_control_allow_origin" : "*"
},
"to" : {
"base_url" : "https://localhost",
"email_from" : "no-reply@traffic-ops.test",
"no_account_found_msg" : "A Traffic Ops user account is required for access. Please contact your Traffic Ops user administrator."
},
"portal" : {
"base_url" : "https://not-a-real-host.test/#!/",
"email_from" : "no-reply@traffic-portal.test",
"pass_reset_path" : "user",
"user_register_path" : "user"
},
"secrets" : [
"blahblah"
],
"geniso" : {
"iso_root_path" : "/opt/traffic_ops/app/public"
},
"inactivity_timeout" : 60,
"smtp" : {
"enabled" : false
},
"InfluxEnabled": false
}
10 changes: 10 additions & 0 deletions .github/actions/to-integration-tests/database.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"description": "Local PostgreSQL database on port 5432",
"dbname": "traffic_ops",
"hostname": "postgres",
"user": "traffic_ops",
"password": "twelve",
"port": "5432",
"ssl": false,
"type": "Pg"
}
23 changes: 23 additions & 0 deletions .github/actions/to-integration-tests/dbconf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
version: "1.0"
name: dbconf.yml

test:
driver: postgres
open: host=postgres port=5432 user=traffic_ops password=twelve dbname=traffic_ops sslmode=disable

111 changes: 111 additions & 0 deletions .github/actions/to-integration-tests/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#!/bin/sh -l
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

GOPATH="$(mktemp -d)"
SRCDIR="$GOPATH/src/github.com/apache"
mkdir -p "$SRCDIR"
ln -s "$PWD" "$SRCDIR/trafficcontrol"

cd "$SRCDIR/trafficcontrol/traffic_ops/traffic_ops_golang"


/usr/local/go/bin/go get ./...
/usr/local/go/bin/go build .

echo "
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIJAJgQuE9T48+gMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNTA5MDIyNTI0WhcNMTgwNTA5MDIyNTI0WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEA1OsuQ71qaSZ4ivGnh4YryeQEHMn5wZLX7kWYB637ssyOJnkU1ZGs93JM
XJADzsjmssP6icSDhV2JPgDDYzx1eBJt6y3vHI7L3AdGfQJj+4FFABKR8moqpc1J
WIMGnPzO6DeEc8irf0qxSh+yvuFX0j6oS8oCqiRxz5+HL2wEGWmrgr37JY4/bs7o
4CMY19Ru1dP2Fr292HEIqCEnLTOuaHSWAEWx1Tm93kT9sXbw/SG2JTLQSX80biFL
7foJeoGWLls2reTCYTprzWFaMu3x9I8HLtf4VIN44rtvo5N20KYgjGqvPjFGPljL
yrgB8rXSCpH3M4AbazxD8fZKbdORawIDAQABo4GnMIGkMB0GA1UdDgQWBBT6zEpf
DYbYCI3Bu82+Q5SmI+/7ojB1BgNVHSMEbjBsgBT6zEpfDYbYCI3Bu82+Q5SmI+/7
oqFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNV
BAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAJgQuE9T48+gMAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGLs1NcYNtUgN6FuMb6/UskEWLTKwfno
NBtNdIbcZP3HmJHwruLWCeqj6HIWJC87EqmPTIYPdem3SAN1L20fWpzm7AB7av+2
wTCAPVP0punF/IouSb6fyo8fdG1a104Mge4iy/Sf2uf09NEv08sfVdB4P0tKRRlg
5KChhmspdPP7fmPXyghm4IC0Seknmh6IlVOnALXLU5OoCLHTie5Hjv4Tm8Xu0oBA
dIH/cPu2/w5SAIVq9CtcsdglS0ZsCAv4W2YieuSLPf5xuI0q/5lFZGNoDpIWJldx
Y2IpnoNCrHEAxijP5ctPawsxkSt2PmQ5uNNL7TbMudc3hZzOpTPkGoo=
-----END CERTIFICATE-----
Comment thread
ocket8888 marked this conversation as resolved.
" > localhost.crt

echo "-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA1OsuQ71qaSZ4ivGnh4YryeQEHMn5wZLX7kWYB637ssyOJnkU
1ZGs93JMXJADzsjmssP6icSDhV2JPgDDYzx1eBJt6y3vHI7L3AdGfQJj+4FFABKR
8moqpc1JWIMGnPzO6DeEc8irf0qxSh+yvuFX0j6oS8oCqiRxz5+HL2wEGWmrgr37
JY4/bs7o4CMY19Ru1dP2Fr292HEIqCEnLTOuaHSWAEWx1Tm93kT9sXbw/SG2JTLQ
SX80biFL7foJeoGWLls2reTCYTprzWFaMu3x9I8HLtf4VIN44rtvo5N20KYgjGqv
PjFGPljLyrgB8rXSCpH3M4AbazxD8fZKbdORawIDAQABAoIBAQCYOINc/qCDCHQJ
sfa511ya/B9MjcG3eMpTmQG2C9b033WJX+tbPMjSJ68cRgHS5qK4j5AgypPU1yh1
YYpO+jxpWZOoHbDjU9u/NJxaZ0kf2C2CfcRF8U0IOJoFY7doqP0r2/Uf6glh+f6C
JeNewDBPKWictpHtHh0X+M9nQew0VZ7slXnV+IwUxiWYEtiIjwMyzSmfDEnN3ix5
fuVQLvVaq+bbqXj2rMpJWFj7zMsG5HRePQl2kQGtMYLCIalnJIQs5jQn2YsliNyy
fQiwWnU0wkrLlmkhlivlISRDtP35WQgF8ObsoQ3LZXRflB0C7U7zEl7Dj3Vi7WXr
jsRZC4dxAoGBAPwuPdtc9gSNKjn8RnqfEJjdSo1qdLbGvRcSJNy4/kEEFECJXkeO
mV/aklCi39cxAaIjVdTQ1XN67RMxgdekCI2Eg8h4RdvwgB/tAO+C3ExzMSOA1IcZ
tWuwIA2YnaFF9Sla9iJqxgtoGlaqm4VTUM/IdZqlzsP08pfNq7bXPsr9AoGBANgk
tkovf1Y0O4lBHX3eVLnHXForxEZh8bGHwuJJWWzb0ZFcXrrSd8FSycZrR28v4sdQ
WSSVPz3Op95HoTVXVL9EJcZ+MTnHaoCHbYBkrGTlGviu5Fl2V5EbrN7R7CdxJeem
HOU4shTy1acMPgf8sT17ykkXhVeUhSK2Jg6fZn6HAoGAI4/51SeE4htuKwMyhTRN
SOFcFBlBIE1ieRBr9lx4Ln7+xCMbEog/hM7z9z8gxd35Vv4YqoxQrZpWOHCw2NIf
CqX3V5vubhe6WcY4bY5MttM/yLvwPKUZeng57PDqucV9zzkuoKfiCdXCcRpaGDEp
okOooghj4ip204WDg6NTDZkCgYEAwZTfzsGLgmF1kRBIoZqmt1zeUcQxHfhKx32Y
BaM7/EtD/rSEAz7NEtBa9uLOL77rlSdZL3KcGXck0efFckitFkCqtIQBAoaf1E12
vS9tV0/6QBAjZByhgM0Qnt/Uad7k2/vilUmZ9TkoMVy9kdm3xCFCowP14OKb+uK4
YxBQc7ECgYEAm7eVtNlPHYmC54FU2bLucryNMLmu9I8O6zvbK5sxiMdtlh7OjaUB
RQS5iVc0iTacDZTGh7eqNzgGplj76pWGHeZUy0xIj/ZIRu2qOy0v+ffqfX1wCz7p
A22D22wvfs7CE3cUz/8UnvLM3kbTTu1WbbBbrHjAV47sAHjW/ckTqeo=
-----END RSA PRIVATE KEY-----
" > localhost.key

envsubst </cdn.json >cdn.conf
mv /database.json ./database.conf

./traffic_ops_golang --cfg ./cdn.conf --dbcfg ./database.conf >out.log 2>err.log &
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should stdout and stderr go to the same file so we have context for errors and warnings? Errors will still be pretty easy to find by searching for ERROR:.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stdout won't contain anything too helpful, I pretty much just do that to avoid writing to closed file descriptors, just in case. info, event, and debug logging is piped to /dev/null by the logging configuration. I tried including those in stderr as well, but the resulting logs after the tests finished were so large my browser refused to load the checks page that printed them. One day, we can put the entire log in a build artifact, so at that point we don't need to worry about what the GH UI can handle and can include everything in one stream.


if [ -z "$INPUT_VERSION" ]; then
INPUT_VERSION="3";
fi

cd "../testing/api/v$INPUT_VERSION"

cp /traffic-ops-test.json ./traffic-ops-test.conf
/usr/local/go/bin/go test -v --cfg ./traffic-ops-test.conf
CODE="$?"
rm traffic-ops-test.conf

# TODO - make these build artifacts
if [ -f ../../../traffic_ops_golang/out.log ]; then
cat ../../../traffic_ops_golang/out.log
rm ../.../../traffic_ops_golang/out.log
fi

if [ -f ../../../traffic_ops_golang/err.log ]; then
cat ../../../traffic_ops_golang/err.log >&2
rm ../../../traffic_ops_golang/err.log
fi

exit "$CODE"
38 changes: 38 additions & 0 deletions .github/actions/to-integration-tests/traffic-ops-test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"default": {
"logLocations": {
"debug": "stderr",
"error": "stderr",
"event": "stderr",
"info": "stderr",
"warning": "stderr"
},
"session": {
"timeoutInSecs": 60
}
},
"trafficOps": {
"URL": "https://localhost:6443",
"password": "twelve",
"users": {
"disallowed": "disallowed",
"operations": "operations",
"admin": "admin",
"federation": "federation",
"portal": "portal",
"readOnly": "readOnly",
"extension": "extension"
}
},
"trafficOpsDB": {
"dbname": "traffic_ops",
"description": "Test database to_test",
"hostname": "postgres",
"password": "twelve",
"port": "5432",
"type": "Pg",
"user": "traffic_ops"
},
"noPerl": true,
"noISO": true
}
29 changes: 29 additions & 0 deletions .github/actions/todb-init/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

FROM golang:1.14.2-alpine

RUN apk add --no-cache git gcc gettext postgresql-client musl-dev &&\
go get -v bitbucket.org/liamstask/goose/cmd/goose &&\
mv $GOPATH/bin/goose /bin/ &&\
apk del git gcc musl-dev


COPY entrypoint.sh dbconf.yml /
RUN chmod a+x /entrypoint.sh

ENTRYPOINT /entrypoint.sh
Loading