Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add network container tests #11583

Merged
merged 1 commit into from
Jan 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ jobs:
CARGO_PROFILE_DEV_DEBUG: 1
CARGO_PROFILE_TEST_DEBUG: 1
CARGO_INCREMENTAL: 0
CARGO_PUBLIC_NETWORK_TESTS: 1
strategy:
matrix:
include:
Expand Down Expand Up @@ -77,6 +78,9 @@ jobs:
- run: sudo apt update -y && sudo apt install gcc-multilib libsecret-1-0 libsecret-1-dev -y
if: matrix.os == 'ubuntu-latest'
- run: rustup component add rustfmt || echo "rustfmt not available"
- name: Configure extra test environment
run: echo CARGO_CONTAINER_TESTS=1 >> $GITHUB_ENV
if: matrix.os == 'ubuntu-latest'

# Deny warnings on CI to avoid warnings getting into the codebase.
- run: cargo test --features 'deny-warnings'
Expand Down
17 changes: 17 additions & 0 deletions crates/cargo-test-macro/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,23 @@ pub fn cargo_test(attr: TokenStream, item: TokenStream) -> TokenStream {
"does not work on windows-gnu"
);
}
"container_test" => {
// These tests must be opt-in because they require docker.
set_ignore!(
option_env!("CARGO_CONTAINER_TESTS").is_none(),
"CARGO_CONTAINER_TESTS must be set"
);
}
"public_network_test" => {
// These tests must be opt-in because they touch the public
// network. The use of these should be **EXTREMELY RARE**, and
// should only touch things which would nearly certainly work
// in CI (like github.com).
set_ignore!(
option_env!("CARGO_PUBLIC_NETWORK_TESTS").is_none(),
"CARGO_PUBLIC_NETWORK_TESTS must be set"
);
}
"nightly" => {
requires_reason = true;
set_ignore!(is_not_nightly, "requires nightly");
Expand Down
1 change: 1 addition & 0 deletions crates/cargo-test-support/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ fn main() {
"cargo:rustc-env=NATIVE_ARCH={}",
std::env::var("TARGET").unwrap()
);
println!("cargo:rerun-if-changed=build.rs");
epage marked this conversation as resolved.
Show resolved Hide resolved
}
26 changes: 26 additions & 0 deletions crates/cargo-test-support/containers/apache/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
FROM httpd:2.4-alpine

RUN apk add --no-cache git git-daemon openssl

COPY bar /repos/bar
WORKDIR /repos/bar
RUN git config --global user.email "testuser@example.com" &&\
git config --global user.name "Test User" &&\
git init -b master . &&\
git add Cargo.toml src &&\
git commit -m "Initial commit" &&\
mv .git ../bar.git &&\
cd ../bar.git &&\
git config --bool core.bare true &&\
rm -rf ../bar
WORKDIR /

EXPOSE 443

WORKDIR /usr/local/apache2/conf
COPY httpd-cargo.conf .
RUN cat httpd-cargo.conf >> httpd.conf
RUN openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout server.key -out server.crt \
-subj "/emailAddress=webmaster@example.com/C=US/ST=California/L=San Francisco/O=Rust/OU=Cargo/CN=127.0.0.1"
WORKDIR /
4 changes: 4 additions & 0 deletions crates/cargo-test-support/containers/apache/bar/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
name = "bar"
version = "1.0.0"
edition = "2021"
1 change: 1 addition & 0 deletions crates/cargo-test-support/containers/apache/bar/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Intentionally blank.
12 changes: 12 additions & 0 deletions crates/cargo-test-support/containers/apache/httpd-cargo.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
SetEnv GIT_PROJECT_ROOT /repos
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /repos /usr/libexec/git-core/git-http-backend/
LoadModule cgid_module modules/mod_cgid.so

<Files "git-http-backend">
Require all granted
</Files>

Include conf/extra/httpd-ssl.conf
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
29 changes: 29 additions & 0 deletions crates/cargo-test-support/containers/sshd/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
FROM alpine:3.17

RUN apk add --no-cache openssh git
RUN ssh-keygen -A

RUN addgroup -S testuser && adduser -S testuser -G testuser -s /bin/ash
# NOTE: Ideally the password should be set to *, but I am uncertain how to do
# that in alpine. It shouldn't matter since PermitEmptyPasswords is "no".
RUN passwd -u testuser

RUN mkdir /repos && chown testuser /repos
COPY --chown=testuser:testuser bar /repos/bar
USER testuser
WORKDIR /repos/bar
RUN git config --global user.email "testuser@example.com" &&\
git config --global user.name "Test User" &&\
git init -b master . &&\
git add Cargo.toml src &&\
git commit -m "Initial commit" &&\
mv .git ../bar.git &&\
cd ../bar.git &&\
git config --bool core.bare true &&\
rm -rf ../bar
WORKDIR /
USER root

EXPOSE 22

ENTRYPOINT ["/usr/sbin/sshd", "-D", "-E", "/var/log/auth.log"]
4 changes: 4 additions & 0 deletions crates/cargo-test-support/containers/sshd/bar/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
name = "bar"
version = "1.0.0"
edition = "2021"
1 change: 1 addition & 0 deletions crates/cargo-test-support/containers/sshd/bar/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Intentionally blank.
Loading