diff options
| author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2024-07-24 12:00:50 +0200 |
|---|---|---|
| committer | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2024-11-20 10:40:13 +0100 |
| commit | 257c743f8dae1fe3c6a1d899da852b7b61c54986 (patch) | |
| tree | 39374cd046e231a26ca0691a3328262e5e4b0c4e | |
| parent | c531015db65eb3e71b1fadfe51f9c107a7bf5216 (diff) | |
CI: Convert to forgejo
| -rw-r--r-- | .forgejo/workflows/test.yml | 42 | ||||
| -rw-r--r-- | .github/dependabot.yml | 7 | ||||
| -rw-r--r-- | .github/workflows/deploy.yml | 99 | ||||
| -rw-r--r-- | .github/workflows/test-win.yml | 15 | ||||
| -rw-r--r-- | .github/workflows/test.yml | 99 | ||||
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | internal/failover/monitor_test.go | 30 | ||||
| -rw-r--r-- | selenium_eduvpn.py | 6 |
8 files changed, 67 insertions, 233 deletions
diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml new file mode 100644 index 0000000..fa3ac07 --- /dev/null +++ b/.forgejo/workflows/test.yml @@ -0,0 +1,42 @@ +env: + BUILD_DEPENDENCIES: apt-transport-https curl git iproute2 lsb-release make wget + GOCILINT_VERSION: 1.62.0 +on: [ push ] + +jobs: + test: + runs-on: docker + container: + image: debian:latest + steps: + - name: Install OS Dependencies + run: | + apt-get update + apt-get install --yes $BUILD_DEPENDENCIES + - name: Enable Go Backports + run: | + wget -O /usr/share/keyrings/go+repo@tuxed.net.gpg https://repo.tuxed.net/golang/v1/deb/go+repo@tuxed.net.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/go+repo@tuxed.net.gpg] https://repo.tuxed.net/golang/v1/deb $(lsb_release -c -s) main" > /etc/apt/sources.list.d/golang_v1.list + apt-get update + apt-get install --yes golang-go + - name: Install linter + run: | + wget -O lint.deb https://github.com/golangci/golangci-lint/releases/download/v$GOCILINT_VERSION/golangci-lint-$GOCILINT_VERSION-linux-amd64.deb + dpkg -i lint.deb + rm lint.deb + - name: Clone Repository + run: | + mkdir app + git clone -b ${{ github.ref_name }} ${{ github.server_url }}/${{ github.repository }} app + - name: Download Go deps + run: | + cd app + go get ./... + - name: Test Go + run: | + cd app + unshare -r -n bash -c "ip link set lo up && make test" + - name: Lint + run: | + cd app + make lint diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index b252b61..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,7 +0,0 @@ -# See https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates -version: 2 -updates: - - package-ecosystem: "gomod" - directory: "/" # Location of package manifests - schedule: - interval: "daily" diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index d1766bb..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,99 +0,0 @@ -# Adapted from https://github.com/rust-lang/mdBook/wiki/Automated-Deployment:-GitHub-Actions#github-pages-deploy - -name: Build docs -on: - push: - branches: - - main - -jobs: - deploy: - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Install mdbook - run: | - # Get mdbook - curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.18/mdbook-v0.4.18-x86_64-unknown-linux-gnu.tar.gz -o mdbook.tar.gz - # Verify hash - echo "d276b0e594d5980de6a7917ce74c348f28d3cb8b353ca4eaae344ae8a4c40bea mdbook.tar.gz" | sha256sum --check - - # Get mdbook-mermaid - curl -sSL https://github.com/badboy/mdbook-mermaid/releases/download/v0.12.6/mdbook-mermaid-v0.12.6-x86_64-unknown-linux-gnu.tar.gz -o mdbook-mermaid.tar.gz - # Verify hash - echo "04f9fa41f89b7a1809ef2525efc7ad2c112df4ae1241de25efe354940441ea70 mdbook-mermaid.tar.gz" | sha256sum --check - - # Extract - mkdir mdbook - tar -xzf mdbook.tar.gz --directory mdbook - mkdir mdbook-mermaid - tar -xzf mdbook-mermaid.tar.gz --directory mdbook-mermaid - echo `pwd`/mdbook >> $GITHUB_PATH - echo `pwd`/mdbook-mermaid >> $GITHUB_PATH - - name: Install sphinx - run: | - # Install python dependencies - sudo apt -y install python3 python3-pip python3-sphinx - - # Install rtd theme - pip install sphinx_rtd_theme - - uses: actions/setup-go@v3 - with: - go-version: ^1.22 - - name: Build & Install python-eduvpn-common - run: | - # install pip deps - pip install wheel setuptools build - - # Make go library - make - - # Go to Python wrapper - cd wrappers/python - - # Make wheel - make pack - - # Install wheel - pip3 install dist/*.whl - - name: Deploy GitHub Pages - run: | - # Build Sphinx - cd wrappers/python/docs - make html - - # Go to root - cd ../../.. - - # Install mermaid preprocessor - mdbook-mermaid install docs - - cd docs - mdbook build - - # gh pages branch settings - git worktree add gh-pages gh-pages - git config user.name "Deploy from CI" - git config user.email "" - cd gh-pages - - # Delete the ref to avoid keeping history. - git update-ref -d refs/heads/gh-pages - rm -rf * - - # move mdbook files - mv ../book/* . - - # move sphinx files - mkdir -p api/python/rtd - mv ../../wrappers/python/docs/build/html/* api/python/rtd - - # Disable jekyll as otherwise it won't find our sphinx paths - # that start with underscore - touch .nojekyll - - git add . - git commit -m "Deploy $GITHUB_SHA to gh-pages" - git push --force diff --git a/.github/workflows/test-win.yml b/.github/workflows/test-win.yml deleted file mode 100644 index 5883995..0000000 --- a/.github/workflows/test-win.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: "[Windows] Check build" - -on: [ push, pull_request ] - -jobs: - build-lib: - name: "[Windows] Build shared Go library" - runs-on: windows-latest - - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 - with: - go-version: ^1.22 - - run: make diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 6236dab..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: "[Ubuntu] Test & check build" - -on: [ push, pull_request ] - -jobs: - lint: - name: Linting - runs-on: ubuntu-latest - - steps: - - uses: actions/setup-go@v3 - with: - go-version: ^1.22 - - uses: actions/checkout@v3 - - name: Run golangci-lint - uses: golangci/golangci-lint-action@v3 - with: - version: latest - args: "-E stylecheck,revive,gocritic --out-${NO_FUTURE}format colored-line-number" - - name: Install ruff - run: pip install ruff - - name: Run ruff - run: | - ruff check wrappers/python/eduvpn_common - ruff format --check wrappers/python/eduvpn_common - - test: - name: Run Tests - runs-on: ubuntu-22.04 - env: - WEB_FQDN: eduvpnghci - PORTAL_USER: ci - PORTAL_PASS: ci - steps: - - uses: actions/checkout@v3 - - name: Setup server - run: | - git clone https://codeberg.org/eduvpn/deploy - cd deploy - sudo cp resources/repo+v3@eduvpn.org.asc /etc/apt/trusted.gpg.d/repo+v3@eduvpn.org.asc - echo "deb https://repo.eduvpn.org/v3/deb jammy main" | sudo tee /etc/apt/sources.list.d/eduVPN_v3.list - sudo apt-get -y update - sudo apt-get install -y vpn-user-portal vpn-server-node vpn-maint-scripts - sudo openssl req -nodes -subj "/CN=${WEB_FQDN}" -addext "subjectAltName = DNS:${WEB_FQDN}" -x509 -sha256 -newkey rsa:2048 -keyout "/etc/ssl/private/${WEB_FQDN}.key" -out "/etc/ssl/certs/${WEB_FQDN}.crt" -days 90 - # Apache 2 - PHP_VERSION=$(/usr/sbin/phpquery -V) - sudo a2enmod ssl headers rewrite proxy_fcgi setenvif - sudo a2dismod status - sudo a2enconf "php${PHP_VERSION}-fpm" - sudo cp resources/ssl.debian.conf /etc/apache2/mods-available/ssl.conf - sudo cp resources/vpn.example.debian.conf "/etc/apache2/sites-available/${WEB_FQDN}.conf" - sudo cp resources/localhost.debian.conf /etc/apache2/sites-available/localhost.conf - sudo sed -i "s/vpn.example/${WEB_FQDN}/" "/etc/apache2/sites-available/${WEB_FQDN}.conf" - sudo a2enconf vpn-user-portal - sudo a2ensite "${WEB_FQDN}" localhost - sudo a2dissite 000-default - sudo systemctl restart apache2 - - # NETWORK - sudo cp /etc/vpn-user-portal/keys/node.0.key /etc/vpn-server-node/keys/node.key - - sudo systemctl enable --now "php${PHP_VERSION}-fpm" - sudo systemctl enable --now apache2 - - sudo /usr/libexec/vpn-server-node/server-config - sudo -u www-data vpn-user-portal-account --add "${PORTAL_USER}" --password "${PORTAL_PASS}" - - # Update /etc/hosts to point to our server - echo "127.0.0.1 ${WEB_FQDN}" | sudo tee -a /etc/hosts - - uses: actions/setup-go@v3 - with: - go-version: ^1.22 - - name: Selenium dependencies - run: | - sudo apt-get -y update - sudo apt-get -y install tar python3 python3-selenium - - name: Test Go - run: | - # Add geckodriver and go to path - export PATH=$PATH:/usr/local/go/bin - - ## Run tests - SERVER_URI=https://${WEB_FQDN} make test - - build-lib: - name: Build shared Go library - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 - with: - go-version: ^1.22 - - run: make - - uses: actions/upload-artifact@v3 - with: - name: shared-lib - path: exports/lib/ - retention-days: 1 @@ -18,7 +18,7 @@ cli: go build -o eduvpn-common-cli ./cmd/cli test: - go test -tags=cgotesting -race ./... + go test -tags=cgotesting -race -v ./... clean: rm -rf lib diff --git a/internal/failover/monitor_test.go b/internal/failover/monitor_test.go index 87fb3cd..08b2e74 100644 --- a/internal/failover/monitor_test.go +++ b/internal/failover/monitor_test.go @@ -12,9 +12,14 @@ import ( // mockedPinger is a ping sender that always returns nil for sending // but returns EOF for reading -type mockedPinger struct{} +type mockedPinger struct{ + cleanRead bool +} func (mp *mockedPinger) Read(_ time.Time) error { + if mp.cleanRead { + return nil + } return io.EOF } @@ -43,18 +48,27 @@ func TestMonitor(t *testing.T) { readRxBytes: func() (int64, error) { return 0, errors.New("error test") }, + mockedPinger: func(_ string, _ int) (sender, error) { + return &mockedPinger{}, nil + }, wantDropped: false, wantErr: "error test", }, // default case, not dropped - {}, - // readRxBytes always returns 0 - // still we do not want a drop because we get a pong from 127.0.0.1 + { + mockedPinger: func(_ string, _ int) (sender, error) { + return &mockedPinger{}, nil + }, + }, + // default case where it could read a ping response, and read rx bytes always returns 0 + // should be not dropped { readRxBytes: func() (int64, error) { return 0, nil }, - wantDropped: false, + mockedPinger: func(_ string, _ int) (sender, error) { + return &mockedPinger{cleanRead: true}, nil + }, }, // readRxBytes always returns 0 // we want dropped as the mock pinger does nothing @@ -74,7 +88,7 @@ func TestMonitor(t *testing.T) { var counter int64 // some defaults if c.interval == 0 { - c.interval = 2 * time.Second + c.interval = 2 * time.Millisecond } if c.pDropped == 0 { c.pDropped = 5 @@ -94,9 +108,7 @@ func TestMonitor(t *testing.T) { } } dcm := NewDroppedMonitor(c.interval, c.pDropped, c.readRxBytes) - if c.mockedPinger != nil { - dcm.newPinger = c.mockedPinger - } + dcm.newPinger = c.mockedPinger dropped, err := dcm.Start(context.Background(), c.gateway, c.mtuSize) if dropped != c.wantDropped { t.Fatalf("dropped is not equal to want dropped, got: %v, want: %v", dropped, c.wantDropped) diff --git a/selenium_eduvpn.py b/selenium_eduvpn.py index 605bc54..417b46c 100644 --- a/selenium_eduvpn.py +++ b/selenium_eduvpn.py @@ -8,9 +8,7 @@ from selenium.webdriver.firefox.options import Options def login_eduvpn(authURL): options = Options() - options.headless = True - - # Use the firefox driver + options.add_argument("-headless") driver = webdriver.Firefox(options=options) login_oauth(driver, authURL) @@ -23,6 +21,7 @@ def login_eduvpn(authURL): def login_oauth(driver, authURL): # Go to the oauth url and verify the title driver.get(authURL) + print(driver.title) assert "VPN Portal - Sign In" in driver.title # Get credentials @@ -52,6 +51,7 @@ def login_oauth(driver, authURL): ).click() # Check that we have reached the approve application page + print(driver.title) assert "VPN Portal - Approve Application" in driver.title # Click approve driver.find_element( |
