Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
22978f0
test(dgw): cover credential injection reconnect
irvingoujAtDevolution Aug 20, 2026
bdd0a85
style(dgw): fix clippy literal suffixes in injection e2e
irvingoujAtDevolution Aug 20, 2026
362d126
test(dgw): complete Kerberos injection against a mock KDC
irvingoujAtDevolution Aug 20, 2026
4e43b2d
test(dgw): cover Kerberos client leg and fail-closed paths
irvingoujAtDevolution Aug 20, 2026
7f41c35
test(dgw): assert KDC principals and CredSSP identities
irvingoujAtDevolution Aug 21, 2026
80ba66e
test(dgw): decode cookies and KdcProxy AS-REQ principal
irvingoujAtDevolution Aug 21, 2026
ed5b452
test(dgw): tighten hop asserts without Gateway source changes
irvingoujAtDevolution Aug 21, 2026
3842303
test(dgw): assert missing krb_kdc never dials the target
irvingoujAtDevolution Aug 21, 2026
40f5565
test(dgw): drive RDCleanPath injection with ironrdp-agent 0.1.0
irvingoujAtDevolution Aug 21, 2026
afd80e1
test(dgw): tighten injection e2e review nits
irvingoujAtDevolution Aug 24, 2026
0fd2b17
test(dgw): run injection E2E without debug flags
irvingoujAtDevolution Aug 25, 2026
1bb3f6a
test(dgw): allow forwarding after staging expiry
irvingoujAtDevolution Aug 25, 2026
c7d0b0f
test(dgw): use direct rustls paths
irvingoujAtDevolution Aug 26, 2026
a0c85d3
test(dgw): move injection helpers into testsuite lib
irvingoujAtDevolution Aug 27, 2026
8cf244f
test(dgw): clarify credential injection tests
irvingoujAtDevolution Aug 28, 2026
5e7e099
test(dgw): keep one intent file for the injection suite
irvingoujAtDevolution Aug 28, 2026
cfa5c4b
test(dgw): require ironrdp-agent for RDCleanPath coverage
irvingoujAtDevolution Aug 28, 2026
2478426
test(dgw): lift ironrdp-agent harness to a top-level helper
irvingoujAtDevolution Aug 28, 2026
3db974e
chore(testsuite): refresh Cargo.lock for injection test deps
irvingoujAtDevolution Sep 24, 2026
08f9b76
test(dgw): mark credential injection test oracles
irvingoujAtDevolution Oct 27, 2026
521d16e
test(dgw): bind the mock RDP server on loopback only
irvingoujAtDevolution Oct 27, 2026
f13d511
test(dgw): listen on ::1 for the closed RDP target too
irvingoujAtDevolution Oct 27, 2026
3bb02af
test(dgw): run injection test peers from a dedicated mock binary
irvingoujAtDevolution Oct 30, 2026
d75f42a
docs(dgw): state intent for the credential injection mock
irvingoujAtDevolution Nov 2, 2026
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
16 changes: 16 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,22 @@ jobs:
sudo apt-get update
sudo apt-get -o Acquire::Retries=3 install libsystemd-dev

## Required by the RDCleanPath credential-injection tests in the testsuite.
## Keep the version in sync with IRONRDP_AGENT_VERSION in testsuite/src/ironrdp_agent.rs.
- name: Cache ironrdp-agent
id: cache-ironrdp-agent
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/ironrdp-agent
~/.cargo/bin/ironrdp-agent.exe
key: ironrdp-agent-0.1.0-${{ runner.os }}

- name: Install ironrdp-agent
if: ${{ steps.cache-ironrdp-agent.outputs.cache-hit != 'true' }}
shell: pwsh
run: cargo install ironrdp-agent --version 0.1.0 --locked

- name: Tests
run: ./ci/tlk.ps1 test -Platform ${{ matrix.os }} -Architecture ${{ matrix.arch }} -CargoProfile 'dev'
shell: pwsh
Expand Down
20 changes: 20 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 26 additions & 0 deletions crates/credential-injection-mock/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
[package]
name = "credential-injection-mock"
version = "0.0.0"
authors = ["Devolutions Inc. <infos@devolutions.net>"]
edition = "2024"
description = "Fake RDP peers and KDC for the Gateway credential-injection tests"
publish = false

[lints]
workspace = true

[dependencies]
anyhow = "1"
ironrdp-connector = "0.10"
ironrdp-core = { version = "0.2", features = ["std"] }
ironrdp-pdu = { version = "0.9", features = ["std"] }
ironrdp-tokio = "0.10"
kdc = "0.1"
picky-asn1-der = "0.5"
picky-krb = "0.12"
rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["rt-multi-thread", "macros", "time", "net", "io-util"] }
tokio-rustls = { version = "0.26", features = ["ring"] }
x509-cert = { version = "0.3", default-features = false, features = ["std"] }
8 changes: 8 additions & 0 deletions crates/credential-injection-mock/INTENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
This binary is the mock RDP client, RDP server and KDC that the credential-injection tests in `testsuite` run against Gateway.
It is a separate program so that `testsuite` does not depend on the RDP and Kerberos crates.
It holds the client side too, because ironrdp-agent's direct TCP connection sends no preconnection blob, and the Gateway TCP listener requires one.

## Shared libraries

The mock uses the same CredSSP library (sspi) and the same `kdc` crate as Gateway, so a bug shared by both sides passes the tests.
This is accepted: the tests check Gateway's credential injection, not whether these libraries follow the protocol.
Loading
Loading