Compare commits

...

17 Commits

Author SHA1 Message Date
João "Pisco" Fernandes d7c62aed71 Release 2026.1.2 2026-01-23 12:45:53 +00:00
João "Pisco" Fernandes 2b95c61044 Revert "TUN-9863: Update pipelines to use cloudflared EV Certificate"
This reverts commit 789a9b110d.
2026-01-23 12:45:36 +00:00
João "Pisco" Fernandes efd0189121 Revert "TUN-9886 notarize cloudflared"
This reverts commit 9abcfece66.
2026-01-21 13:33:53 +00:00
Andi Anderson 9abcfece66 TUN-9886 notarize cloudflared 2026-01-21 12:14:06 +00:00
João "Pisco" Fernandes 8aebc38b2f Release 2026.1.1 2026-01-19 18:11:47 +00:00
João "Pisco" Fernandes b4f675c082 fix: rpm bundling and rpm key import 2026-01-19 18:10:47 +00:00
João "Pisco" Fernandes a29afd842e fix: Fix wixl bundling tool for windows msi packages 2026-01-19 12:48:30 +00:00
João "Pisco" Fernandes d9cdd49eec fix: Update boto3 to run on trixie 2026-01-19 12:47:30 +00:00
João "Pisco" Fernandes 8af01d583c Release 2026.1.0 2026-01-16 17:48:15 +00:00
chungthuang 3e6d8ed216 TUN-9998: Don't need to read origin cert to determine if the endpoint is fedramp 2026-01-14 15:07:51 +00:00
chungthuang 1e907e99b5 TUN-9910: Make the metadata key to carry HTTP status over QUIC transport a constant 2026-01-14 14:28:08 +00:00
João "Pisco" Fernandes 18eab5879f TUN-10162: Update go to 1.24.11 and Debian distroless to debian13 2026-01-13 13:08:16 +00:00
GitLab Maintenance Bot 0d2a7a0385 Replace jira.cfops.it with jira.cfdata.org in connection/http2_test.go 2025-11-21 05:33:09 +00:00
João "Pisco" Fernandes 789a9b110d TUN-9863: Update pipelines to use cloudflared EV Certificate 2025-11-19 18:05:33 +00:00
João "Pisco" Fernandes 31f45fb505 TUN-9800: Migrate apt internal builds to Gitlab 2025-11-10 14:43:10 +00:00
João "Pisco" Fernandes 17533b124c Release 2025.11.1 2025-11-07 16:30:58 +00:00
João "Pisco" Fernandes 9ce16c5aac TUN-9800: Fix docker hub push step 2025-11-07 15:26:22 +00:00
26 changed files with 274 additions and 128 deletions
+151
View File
@@ -0,0 +1,151 @@
.register_inputs: &register_inputs
stage: release-internal
runOnBranches: "^master$"
COMPONENT: "common"
.register_inputs_stable_bookworm: &register_inputs_stable_bookworm
<<: *register_inputs
runOnChangesTo: ['RELEASE_NOTES']
FLAVOR: "bookworm"
SERIES: "stable"
.register_inputs_stable_trixie: &register_inputs_stable_trixie
<<: *register_inputs
runOnChangesTo: ['RELEASE_NOTES']
FLAVOR: "trixie"
SERIES: "stable"
.register_inputs_next_bookworm: &register_inputs_next_bookworm
<<: *register_inputs
FLAVOR: "bookworm"
SERIES: next
.register_inputs_next_trixie: &register_inputs_next_trixie
<<: *register_inputs
FLAVOR: "trixie"
SERIES: next
################################################
### Generate Debian Package for Internal APT ###
################################################
.cloudflared-apt-build: &cloudflared_apt_build
stage: package
needs:
- ci-image-get-image-ref
- linux-packaging # For consistency, we only run this job after we knew we could build the packages for external delivery
image: $BUILD_IMAGE
cache: {}
script:
- make cloudflared-deb
artifacts:
paths:
- cloudflared*.deb
##############
### Stable ###
##############
cloudflared-amd64-stable:
<<: *cloudflared_apt_build
rules:
- !reference [.default-rules, run-on-release]
variables: &amd64-stable-vars
GOOS: linux
GOARCH: amd64
FIPS: true
ORIGINAL_NAME: true
CGO_ENABLED: 1
cloudflared-arm64-stable:
<<: *cloudflared_apt_build
rules:
- !reference [.default-rules, run-on-release]
variables: &arm64-stable-vars
GOOS: linux
GOARCH: arm64
FIPS: false # TUN-7595
ORIGINAL_NAME: true
CGO_ENABLED: 1
############
### Next ###
############
cloudflared-amd64-next:
<<: *cloudflared_apt_build
rules:
- !reference [.default-rules, run-on-master]
variables:
<<: *amd64-stable-vars
NIGHTLY: true
cloudflared-arm64-next:
<<: *cloudflared_apt_build
rules:
- !reference [.default-rules, run-on-master]
variables:
<<: *arm64-stable-vars
NIGHTLY: true
include:
- local: .ci/commons.gitlab-ci.yml
##########################################
### Publish Packages to Internal Repos ###
##########################################
# Bookworm AMD64
- component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
inputs:
<<: *register_inputs_stable_bookworm
jobPrefix: cloudflared-bookworm-amd64
needs: &amd64-stable ["cloudflared-amd64-stable"]
# Bookworm ARM64
- component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
inputs:
<<: *register_inputs_stable_bookworm
jobPrefix: cloudflared-bookworm-arm64
needs: &arm64-stable ["cloudflared-arm64-stable"]
# Trixie AMD64
- component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
inputs:
<<: *register_inputs_stable_trixie
jobPrefix: cloudflared-trixie-amd64
needs: *amd64-stable
# Trixie ARM64
- component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
inputs:
<<: *register_inputs_stable_trixie
jobPrefix: cloudflared-trixie-arm64
needs: *arm64-stable
##################################################
### Publish Nightly Packages to Internal Repos ###
##################################################
# Bookworm AMD64
- component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
inputs:
<<: *register_inputs_next_bookworm
jobPrefix: cloudflared-nightly-bookworm-amd64
needs: &amd64-next ['cloudflared-amd64-next']
# Bookworm ARM64
- component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
inputs:
<<: *register_inputs_next_bookworm
jobPrefix: cloudflared-nightly-bookworm-arm64
needs: &arm64-next ['cloudflared-arm64-next']
# Trixie AMD64
- component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
inputs:
<<: *register_inputs_next_trixie
jobPrefix: cloudflared-nightly-trixie-amd64
needs: *amd64-next
# Trixie ARM64
- component: $CI_SERVER_FQDN/cloudflare/ci/apt-register/register@~latest
inputs:
<<: *register_inputs_next_trixie
jobPrefix: cloudflared-nightly-trixie-arm64
needs: *arm64-next
+7 -15
View File
@@ -20,21 +20,13 @@
- if: $CI_COMMIT_BRANCH != null && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: on_success
- when: never
# This before_script is injected into every job that runs on master meaning that if there is no tag the step
# will succeed but only write "No tag present - Skipping" to the console.
.check-tag:
before_script:
- |
# Check if there is a Git tag pointing to HEAD
echo "Tag found: $(git tag --points-at HEAD | grep .)"
if git tag --points-at HEAD | grep .; then
echo "Tag found: $(git tag --points-at HEAD | grep .)"
export "VERSION=$(git tag --points-at HEAD | grep .)"
else
echo "No tag present — skipping."
exit 0
fi
# Rules to run the job only when a release happens
run-on-release:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- 'RELEASE_NOTES'
when: on_success
- when: never
.component-tests:
image: $BUILD_IMAGE
+19 -12
View File
@@ -1,32 +1,39 @@
ARG CLOUDFLARE_DOCKER_REGISTRY_HOST
FROM ${CLOUDFLARE_DOCKER_REGISTRY_HOST:-registry.cfdata.org}/stash/cf/debian-images/bookworm/main:2025.7.0@sha256:6350da2f7e728dae2c1420f6dafc38e23cacc0b399d3d5b2f40fe48d9c8ff1ca
FROM ${CLOUDFLARE_DOCKER_REGISTRY_HOST:-registry.cfdata.org}/stash/cf/debian-images/trixie/main:2026.1.0@sha256:e32092fd01520f5ae7de1fa6bb5a721720900ebeaa48e98f36f6f86168833cd7
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install --no-install-recommends --allow-downgrades -y \
build-essential \
git \
go-boring=1.24.9-1 \
go-boring=1.24.11-1 \
libffi-dev \
procps \
python3-dev \
python3-pip \
python3-setuptools \
python3-venv \
# libmsi and libgcab are libraries the wixl binary depends on.
libmsi-dev \
libgcab-dev \
# deb and rpm build tools
rubygem-fpm \
# tool to create msi packages
wixl \
# install ruby and rpm which are required to install fpm package builder
rpm \
ruby \
ruby-dev \
rubygems \
# create deb and rpm repository files
reprepro \
createrepo-c && \
createrepo-c \
# gcc for cross architecture compilation in arm
gcc-aarch64-linux-gnu \
libc6-dev-arm64-cross && \
rm -rf /var/lib/apt/lists/* && \
# Install wixl
curl -o /usr/local/bin/wixl -L https://pkg.cloudflare.com/binaries/wixl && \
chmod a+x /usr/local/bin/wixl && \
# Install fpm gem
gem install fpm --no-document && \
# Initialize rpm repository, SQL Lite DB
mkdir -p /var/lib/rpm && \
rpm --initdb && \
chmod -R 777 /var/lib/rpm && \
# Create work directory
mkdir -p opt
WORKDIR /opt
+1 -1
View File
@@ -5,7 +5,7 @@
runner: linux-x86-8cpu-16gb
stage: build
golangVersion: "boring-1.24"
imageVersion: "3371-f5539bd6f83d@sha256:a2a68f580070f9411d0d3155959ed63b700ef319b5fcc62db340e92227bbc628"
imageVersion: "3393-947ec7a@sha256:f81acc2c8ecaa84acb290c43c080702ae3aba6464201a20f9d6eff619be7c878"
CGO_ENABLED: 1
.default-packaging-job: &packaging-job-defaults
+15 -6
View File
@@ -16,15 +16,18 @@ include:
- release-cloudflared-to-r2
commentImageRefs: false
runner: vm-linux-x86-4cpu-8gb
DOCKER_USER_BRANCH: svcgithubdockerhubcloudflar045
DOCKER_PASSWORD_BRANCH: gitlab/cloudflare/tun/cloudflared/_dev/dockerhub/svc_password/data
# Based on if the CI reference is protected or not the CI component will
# either use _BRANCH or _PROD, therefore, to prevent the pipelines from failing
# we simply set both to the same value.
DOCKER_USER_BRANCH: &docker-hub-user svcgithubdockerhubcloudflar045
DOCKER_PASSWORD_BRANCH: &docker-hub-password gitlab/cloudflare/tun/cloudflared/_dev/dockerhub/svc_password/data
DOCKER_USER_PROD: *docker-hub-user
DOCKER_PASSWORD_PROD: *docker-hub-password
EXTRA_DIB_ARGS: --overwrite
.default-release-job: &release-job-defaults
stage: release
image: $BUILD_IMAGE
rules:
- !reference [.default-rules, run-on-master]
cache:
paths:
- .cache/pip
@@ -71,7 +74,8 @@ include:
###########################################
release-cloudflared-to-github:
<<: *release-job-defaults
extends: .check-tag
rules:
- !reference [.default-rules, run-on-release]
needs:
- ci-image-get-image-ref
- linux-packaging
@@ -86,7 +90,8 @@ release-cloudflared-to-github:
#########################################
release-cloudflared-to-r2:
<<: *release-job-defaults
extends: .check-tag
rules:
- !reference [.default-rules, run-on-release]
needs:
- ci-image-get-image-ref
- linux-packaging # We only release non-FIPS binaries to R2
@@ -99,6 +104,8 @@ release-cloudflared-to-r2:
#################################################
release-cloudflared-nightly-to-r2:
<<: *release-job-defaults
rules:
- !reference [.default-rules, run-on-master]
variables:
<<: *release-job-variables
R2_BUCKET: cloudflared-pkgs-next
@@ -115,6 +122,8 @@ release-cloudflared-nightly-to-r2:
#############################
generate-version-file:
<<: *release-job-defaults
rules:
- !reference [.default-rules, run-on-release]
needs:
- ci-image-get-image-ref
script:
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
set -e -o pipefail
set -e -u -o pipefail
# Fetch cloudflared from the artifacts folder
mv ./artifacts/cloudflared ./cloudflared
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
set -e -o pipefail
set -e -u -o pipefail
OUTPUT=$(go run -mod=readonly golang.org/x/tools/cmd/goimports@v0.30.0 -l -d -local github.com/cloudflare/cloudflared $(go list -mod=vendor -f '{{.Dir}}' -a ./... | fgrep -v tunnelrpc))
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
set -e -o pipefail
set -e -u -o pipefail
BRANCH="master"
TMP_PATH="$PWD/tmp"
+1
View File
@@ -1,4 +1,5 @@
#!/bin/bash
set -e -u -o pipefail
VERSION=$(git describe --tags --always --match "[0-9][0-9][0-9][0-9].*.*")
echo $VERSION
+1
View File
@@ -1,4 +1,5 @@
#!/bin/bash
set -e -u -o pipefail
# Check if architecture argument is provided
if [ $# -eq 0 ]; then
+2
View File
@@ -1,4 +1,6 @@
#!/bin/bash
set -e -u -o pipefail
python3 -m venv env
. env/bin/activate
pip install pynacl==1.4.0 pygithub==1.55
+2 -2
View File
@@ -1,5 +1,5 @@
#!/bin/bash
set -e -o pipefail
set -e -u -o pipefail
# Check if a make target is provided as an argument
if [ $# -eq 0 ]; then
@@ -14,5 +14,5 @@ python3 -m venv venv
source venv/bin/activate
# Our release scripts are written in python, so we should install their dependecies here.
pip install pynacl==1.4.0 pygithub==1.55 boto3==1.22.9 python-gnupg==0.4.9
pip install pynacl==1.4.0 pygithub==1.55 boto3==1.42.30 python-gnupg==0.4.9
make $MAKE_TARGET
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
set -e
set -e -u
# Define the file to store the list of vulnerabilities to ignore.
IGNORE_FILE=".vulnignore"
+1
View File
@@ -18,3 +18,4 @@ ssh_server_tests/.env
/.cover
built_artifacts/
component-tests/.venv
/artifacts
+7 -2
View File
@@ -1,5 +1,5 @@
variables:
GO_VERSION: "go1.24.9"
GO_VERSION: "go1.24.11"
GIT_DEPTH: "0"
default:
@@ -7,7 +7,7 @@ default:
VAULT_ID_TOKEN:
aud: https://vault.cfdata.org
stages: [sync, pre-build, build, validate, test, package, release, review]
stages: [sync, pre-build, build, validate, test, package, release, release-internal, review]
include:
#####################################################
@@ -45,6 +45,11 @@ include:
#####################################################
- local: .ci/release.gitlab-ci.yml
#####################################################
########## Release Packages Internally ##############
#####################################################
- local: .ci/apt-internal.gitlab-ci.yml
#####################################################
############## Manual Claude Review #################
#####################################################
+1
View File
@@ -1,3 +1,4 @@
# Add vulnerability IDs (e.g., GO-2022-0450) to ignore, one per line.
# You can also add comments on the same line after the ID.
GO-2025-3942 # Ignore core-dns vulnerability since we will be removing the proxy-dns feature in the near future
GO-2026-4289 # Ignore core-dns vulnerability since we will be removing the proxy-dns feature in the near future
+2 -2
View File
@@ -1,7 +1,7 @@
# use a builder image for building cloudflare
ARG TARGET_GOOS
ARG TARGET_GOARCH
FROM golang:1.24.9 AS builder
FROM golang:1.24.11 AS builder
ENV GO111MODULE=on \
CGO_ENABLED=0 \
TARGET_GOOS=${TARGET_GOOS} \
@@ -20,7 +20,7 @@ COPY . .
RUN make cloudflared
# use a distroless base image with glibc
FROM gcr.io/distroless/base-debian12:nonroot
FROM gcr.io/distroless/base-debian13:nonroot
LABEL org.opencontainers.image.source="https://github.com/cloudflare/cloudflared"
+2 -2
View File
@@ -1,5 +1,5 @@
# use a builder image for building cloudflare
FROM golang:1.24.9 AS builder
FROM golang:1.24.11 AS builder
ENV GO111MODULE=on \
CGO_ENABLED=0 \
# the CONTAINER_BUILD envvar is used set github.com/cloudflare/cloudflared/metrics.Runtime=virtual
@@ -15,7 +15,7 @@ COPY . .
RUN GOOS=linux GOARCH=amd64 make cloudflared
# use a distroless base image with glibc
FROM gcr.io/distroless/base-debian12:nonroot
FROM gcr.io/distroless/base-debian13:nonroot
LABEL org.opencontainers.image.source="https://github.com/cloudflare/cloudflared"
+2 -2
View File
@@ -1,5 +1,5 @@
# use a builder image for building cloudflare
FROM golang:1.24.9 AS builder
FROM golang:1.24.11 AS builder
ENV GO111MODULE=on \
CGO_ENABLED=0 \
# the CONTAINER_BUILD envvar is used set github.com/cloudflare/cloudflared/metrics.Runtime=virtual
@@ -15,7 +15,7 @@ COPY . .
RUN GOOS=linux GOARCH=arm64 make cloudflared
# use a distroless base image with glibc
FROM gcr.io/distroless/base-debian12:nonroot-arm64
FROM gcr.io/distroless/base-debian13:nonroot-arm64
LABEL org.opencontainers.image.source="https://github.com/cloudflare/cloudflared"
+21
View File
@@ -1,3 +1,24 @@
2026.1.2
- 2026-01-23 Revert "TUN-9863: Update pipelines to use cloudflared EV Certificate"
- 2026-01-21 Revert "TUN-9886 notarize cloudflared"
- 2025-12-12 TUN-9886 notarize cloudflared
2026.1.1
- 2026-01-19 fix: Update boto3 to run on trixie
- 2026-01-19 fix: Fix wixl bundling tool for windows msi packages
- 2026-01-19 fix: rpm bundling and rpm key import
2026.1.0
- 2026-01-13 TUN-10162: Update go to 1.24.11 and Debian distroless to debian13
- 2025-11-21 Replace jira.cfops.it with jira.cfdata.org in connection/http2_test.go
- 2025-11-19 TUN-9863: Update pipelines to use cloudflared EV Certificate
- 2025-11-07 TUN-9800: Migrate apt internal builds to Gitlab
- 2025-11-04 TUN-9998: Don't need to read origin cert to determine if the endpoint is fedramp
- 2025-10-13 TUN-9910: Make the metadata key to carry HTTP status over QUIC transport a constant
2025.11.1
- 2025-11-07 TUN-9800: Fix docker hub push step
2025.11.0
- 2025-11-06 TUN-9863: Introduce Code Signing for Windows Builds
- 2025-11-06 TUN-9800: Prefix gitlab steps with operating system
+2 -52
View File
@@ -1,52 +1,2 @@
pinned_go: &pinned_go go-boring=1.24.9-1
build_dir: &build_dir /cfsetup_build
default-flavor: bookworm
bookworm: &bookworm
build-fips-internal-deb:
build_dir: *build_dir
builddeps: &build_fips_deb_deps
- *pinned_go
- build-essential
- fakeroot
- rubygem-fpm
post-cache:
- export GOOS=linux
- export GOARCH=amd64
- export FIPS=true
- export ORIGINAL_NAME=true
- make cloudflared-deb
build-internal-deb-nightly-amd64:
build_dir: *build_dir
builddeps: *build_fips_deb_deps
post-cache:
- export GOOS=linux
- export GOARCH=amd64
- export NIGHTLY=true
- export FIPS=true
- export ORIGINAL_NAME=true
- make cloudflared-deb
build-internal-deb-nightly-arm64:
build_dir: *build_dir
builddeps: *build_fips_deb_deps
post-cache:
- export GOOS=linux
- export GOARCH=arm64
- export NIGHTLY=true
# - export FIPS=true # TUN-7595
- export ORIGINAL_NAME=true
- make cloudflared-deb
build-deb-arm64:
build_dir: *build_dir
builddeps:
- *pinned_go
- build-essential
- fakeroot
- rubygem-fpm
post-cache:
- export GOOS=linux
- export GOARCH=arm64
- make cloudflared-deb
trixie: *bookworm
# A valid cfsetup.yaml is required but we dont have any real config to specify
dummy_key: true
+6 -12
View File
@@ -427,15 +427,16 @@ func StartServer(
return waitToShutdown(&wg, cancel, errC, graceShutdownC, 0, log)
}
if namedTunnel == nil {
return fmt.Errorf("namedTunnel is nil outside of DNS proxy stand-alone mode")
}
logTransport := logger.CreateTransportLoggerFromContext(c, logger.EnableTerminalLog)
observer := connection.NewObserver(log, logTransport)
// Send Quick Tunnel URL to UI if applicable
var quickTunnelURL string
if namedTunnel != nil {
quickTunnelURL = namedTunnel.QuickTunnelUrl
}
quickTunnelURL := namedTunnel.QuickTunnelUrl
if quickTunnelURL != "" {
observer.SendURL(quickTunnelURL)
}
@@ -459,14 +460,7 @@ func StartServer(
}
}
userCreds, err := credentials.Read(c.String(cfdflags.OriginCert), log)
var isFEDEndpoint bool
if err != nil {
isFEDEndpoint = false
} else {
isFEDEndpoint = userCreds.IsFEDEndpoint()
}
isFEDEndpoint := namedTunnel.Credentials.Endpoint == credentials.FedEndpoint
var managementHostname string
if isFEDEndpoint {
managementHostname = credentials.FedRampHostname
+8 -6
View File
@@ -63,12 +63,14 @@ func (s searchByID) Path() (string, error) {
Str("originCertPath", originCertPath).
Logger()
// Fallback to look for tunnel credentials in the origin cert directory
if originCertPath, err := credentials.FindOriginCert(originCertPath, &originCertLog); err == nil {
originCertDir := filepath.Dir(originCertPath)
if filePath, err := tunnelFilePath(s.id, originCertDir); err == nil {
if s.fs.validFilePath(filePath) {
return filePath, nil
if originCertPath != "" {
// Look for tunnel credentials in the origin cert directory if the flag is provided
if originCertPath, err := credentials.FindOriginCert(originCertPath, &originCertLog); err == nil {
originCertDir := filepath.Dir(originCertPath)
if filePath, err := tunnelFilePath(s.id, originCertDir); err == nil {
if s.fs.validFilePath(filePath) {
return filePath, nil
}
}
}
}
+14 -7
View File
@@ -33,13 +33,20 @@ class TestTunnel:
LOGGER.debug(config)
with start_cloudflared(tmp_path, config, cfd_pre_args=["tunnel", "--ha-connections", "1"], cfd_args=["run"], new_process=True):
wait_tunnel_ready(require_min_connections=1)
resp = send_request(config.get_url()+"/")
assert resp.status_code == 503, "Expected cloudflared to return 503 for all requests with no ingress defined"
resp = send_request(config.get_url()+"/test")
assert resp.status_code == 503, "Expected cloudflared to return 503 for all requests with no ingress defined"
expected_status_code = 503
resp = send_request(config.get_url()+"/", expected_status_code)
assert resp.status_code == expected_status_code, "Expected cloudflared to return 503 for all requests with no ingress defined"
resp = send_request(config.get_url()+"/test", expected_status_code)
assert resp.status_code == expected_status_code, "Expected cloudflared to return 503 for all requests with no ingress defined"
def retry_if_result_none(result):
'''
Returns True if the result is None, indicating that the function should be retried.
'''
return result is None
@retry(stop_max_attempt_number=MAX_RETRIES, wait_fixed=BACKOFF_SECS * 1000)
def send_request(url, headers={}):
@retry(retry_on_result=retry_if_result_none, stop_max_attempt_number=MAX_RETRIES, wait_fixed=BACKOFF_SECS * 1000)
def send_request(url, expected_status_code=200):
with requests.Session() as s:
return s.get(url, timeout=BACKOFF_SECS, headers=headers)
resp = s.get(url, timeout=BACKOFF_SECS)
return resp if resp.status_code == expected_status_code else None
+1 -1
View File
@@ -295,7 +295,7 @@ func TestServeWS(t *testing.T) {
require.False(t, respWriter.panicked)
}
// TestNoWriteAfterServeHTTPReturns is a regression test of https://jira.cfops.it/browse/TUN-5184
// TestNoWriteAfterServeHTTPReturns is a regression test of https://jira.cfdata.org/browse/TUN-5184
// to make sure we don't write to the ResponseWriter after the ServeHTTP method returns
func TestNoWriteAfterServeHTTPReturns(t *testing.T) {
cfdHTTP2Conn, edgeTCPConn := newTestHTTP2Connection()
+4 -2
View File
@@ -33,6 +33,8 @@ const (
HTTPMethodKey = "HttpMethod"
// HTTPHostKey is used to get or set http host in QUIC ALPN if the underlying proxy connection type is HTTP.
HTTPHostKey = "HttpHost"
// HTTPStatus is used to return http status code in QUIC ALPN if the underlying proxy connection type is HTTP.
HTTPStatus = "HttpStatus"
QUICMetadataFlowID = "FlowID"
)
@@ -287,7 +289,7 @@ func (hrw *httpResponseAdapter) AddTrailer(trailerName, trailerValue string) {
func (hrw *httpResponseAdapter) WriteRespHeaders(status int, header http.Header) error {
metadata := make([]pogs.Metadata, 0)
metadata = append(metadata, pogs.Metadata{Key: "HttpStatus", Val: strconv.Itoa(status)})
metadata = append(metadata, pogs.Metadata{Key: HTTPStatus, Val: strconv.Itoa(status)})
for k, vv := range header {
for _, v := range vv {
httpHeaderKey := fmt.Sprintf("%s:%s", HTTPHeaderKey, k)
@@ -327,7 +329,7 @@ func (hrw *httpResponseAdapter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
}
func (hrw *httpResponseAdapter) WriteErrorResponse(err error) {
_ = hrw.WriteConnectResponseData(err, pogs.Metadata{Key: "HttpStatus", Val: strconv.Itoa(http.StatusBadGateway)})
_ = hrw.WriteConnectResponseData(err, pogs.Metadata{Key: HTTPStatus, Val: strconv.Itoa(http.StatusBadGateway)})
}
func (hrw *httpResponseAdapter) WriteConnectResponseData(respErr error, metadata ...pogs.Metadata) error {