Skip to content

Commit 60e966d

Browse files
committed
bughunt nuget probe: no errexit
1 parent 12f5fa1 commit 60e966d

2 files changed

Lines changed: 105 additions & 1 deletion

File tree

‎.github/workflows/bughunt-nuget.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
DOTNET_NOLOGO: '1'
3939
SOCKET_OFFLINE: '1'
4040
run: |
41-
set -u
41+
set +e +o pipefail
4242
SP="$GITHUB_WORKSPACE/target/release/socket-patch"
4343
W="$RUNNER_TEMP/bh"; rm -rf "$W"; mkdir -p "$W"; cd "$W"
4444
wp(){ if command -v cygpath >/dev/null; then cygpath -w "$1"; else echo "$1"; fi; }

‎crates/socket-patch-cli/tests/e2e_nuget_dotnet_build.rs‎

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,3 +927,107 @@ fn nuget_vendored_dotnet_restore_then_manifestless_vex() {
927927
None,
928928
);
929929
}
930+
931+
#[test]
932+
#[ignore = "bughunt scratch"]
933+
fn bughunt_hosted_warm_cache() {
934+
let sb = Sandbox::new();
935+
let Some(dn) = Dotnet::probe("hosted", &sb) else { return; };
936+
let fixture = sb.dir("fixture");
937+
let store_fx = sb.dir("store-fixture");
938+
let _registry = restore_fixture(&dn, &sb, &fixture, &store_fx);
939+
let pristine = std::fs::read(pkg_dir(&store_fx).join(FILE_KEY)).unwrap();
940+
let mut patched = pristine.clone();
941+
patched.extend_from_slice(MARKER);
942+
let upstream = std::fs::read(pkg_dir(&store_fx).join(NUPKG_NAME)).unwrap();
943+
let nupkg = patched_nupkg(&upstream, &patched);
944+
let backend = Backend::start(HOSTED_UUID, &pristine, &patched, Some(&nupkg));
945+
let uri = backend.uri();
946+
let (code, env, stderr) = socket_patch(&fixture, &store_fx, &["scan","--mode","hosted","--json","--yes","--api-url",&uri,"--org",ORG,"--api-token","fake-token","--patch-server-url",&uri]);
947+
eprintln!("BH scan code={code:?} warnings={:#}\n{stderr}", env["redirect"]);
948+
if dn.major >= 9 { allow_http_source(&fixture.join("nuget.config"), HOSTED_UUID); }
949+
// Warm cache, locked restore on the same machine.
950+
std::fs::remove_dir_all(fixture.join("obj")).ok();
951+
let out = dn.restore(&sb, &fixture, &store_fx, &["--locked-mode"]);
952+
eprintln!("BH warm locked: status={:?}\n{}", out.status, String::from_utf8_lossy(&out.stdout));
953+
// Warm cache, no lockfile.
954+
std::fs::remove_file(fixture.join("packages.lock.json")).ok();
955+
std::fs::remove_dir_all(fixture.join("obj")).ok();
956+
let out = dn.restore(&sb, &fixture, &store_fx, &["-p:RestorePackagesWithLockFile=false"]);
957+
eprintln!("BH warm nolock: status={:?}\n{}", out.status, String::from_utf8_lossy(&out.stdout));
958+
let now = std::fs::read(pkg_dir(&store_fx).join(FILE_KEY)).unwrap();
959+
eprintln!("BH warm nolock installed patched? {} ; socket feed nupkg hits={}", now == patched, backend.hits(&format!("/{NUPKG_NAME}")));
960+
let assets = std::fs::read_to_string(fixture.join("obj/project.assets.json")).unwrap_or_default();
961+
eprintln!("BH assets mentions packageFolders: {}", assets.contains("store-fixture"));
962+
}
963+
964+
#[test]
965+
#[ignore = "bughunt scratch"]
966+
fn bughunt_hosted_subdir_lock() {
967+
let sb = Sandbox::new();
968+
let Some(dn) = Dotnet::probe("hosted", &sb) else { return; };
969+
let fixture = sb.dir("fixture");
970+
let store_fx = sb.dir("store-fixture");
971+
let _registry = restore_fixture(&dn, &sb, &fixture, &store_fx);
972+
let sub = fixture.join("src/App");
973+
std::fs::create_dir_all(&sub).unwrap();
974+
for f in ["app.csproj", "packages.lock.json"] { std::fs::rename(fixture.join(f), sub.join(f)).unwrap(); }
975+
std::fs::rename(fixture.join("obj"), sub.join("obj")).unwrap();
976+
let before = std::fs::read_to_string(sub.join("packages.lock.json")).unwrap();
977+
let pristine = std::fs::read(pkg_dir(&store_fx).join(FILE_KEY)).unwrap();
978+
let mut patched = pristine.clone();
979+
patched.extend_from_slice(MARKER);
980+
let upstream = std::fs::read(pkg_dir(&store_fx).join(NUPKG_NAME)).unwrap();
981+
let nupkg = patched_nupkg(&upstream, &patched);
982+
let backend = Backend::start(HOSTED_UUID, &pristine, &patched, Some(&nupkg));
983+
let uri = backend.uri();
984+
let (code, env, stderr) = socket_patch(&fixture, &store_fx, &["scan","--mode","hosted","--json","--yes","--api-url",&uri,"--org",ORG,"--api-token","fake-token","--patch-server-url",&uri]);
985+
eprintln!("BH scan code={code:?} redirect={:#}\n{stderr}", env["redirect"]);
986+
let after = std::fs::read_to_string(sub.join("packages.lock.json")).unwrap();
987+
eprintln!("BH sub lock changed? {}", before != after);
988+
let co = sb.dir("checkout");
989+
copy_tree(&fixture, &co);
990+
std::fs::remove_dir_all(co.join("src/App/obj")).ok();
991+
if dn.major >= 9 { allow_http_source(&co.join("nuget.config"), HOSTED_UUID); }
992+
let store_co = sb.dir("store-co");
993+
let out = dn.restore(&sb, &co.join("src/App"), &store_co, &["--locked-mode"]);
994+
eprintln!("BH cold locked restore: {:?}\n{}", out.status, String::from_utf8_lossy(&out.stdout));
995+
}
996+
997+
#[test]
998+
#[ignore = "bughunt scratch"]
999+
fn bughunt_hosted_user_level_source() {
1000+
let sb = Sandbox::new();
1001+
let Some(dn) = Dotnet::probe("hosted", &sb) else { return; };
1002+
let fixture = sb.dir("fixture");
1003+
let store_fx = sb.dir("store-fixture");
1004+
let _registry = restore_fixture(&dn, &sb, &fixture, &store_fx);
1005+
// user-level config with a corp folder feed
1006+
let feed = sb.dir("corpfeed");
1007+
std::fs::copy("/tmp/claude-0/Corp.Lib.1.0.0.nupkg", feed.join("Corp.Lib.1.0.0.nupkg")).unwrap();
1008+
let ucfg = sb.root().join("home/.nuget/NuGet");
1009+
std::fs::create_dir_all(&ucfg).unwrap();
1010+
std::fs::write(ucfg.join("NuGet.Config"), format!("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration><packageSources><add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" /><add key=\"corp\" value=\"{}\" /></packageSources></configuration>\n", feed.display())).unwrap();
1011+
std::fs::remove_file(fixture.join("nuget.config")).unwrap();
1012+
let cs = std::fs::read_to_string(fixture.join("app.csproj")).unwrap();
1013+
let cs = cs.replacen("<PackageReference ", "<PackageReference Include=\"Corp.Lib\" Version=\"1.0.0\" /><PackageReference ", 1);
1014+
std::fs::write(fixture.join("app.csproj"), cs).unwrap();
1015+
std::fs::remove_file(fixture.join("packages.lock.json")).unwrap();
1016+
dn.restore_ok(&sb, &fixture, &store_fx, &[], "re-restore with corp");
1017+
let pristine = std::fs::read(pkg_dir(&store_fx).join(FILE_KEY)).unwrap();
1018+
let mut patched = pristine.clone();
1019+
patched.extend_from_slice(MARKER);
1020+
let upstream = std::fs::read(pkg_dir(&store_fx).join(NUPKG_NAME)).unwrap();
1021+
let nupkg = patched_nupkg(&upstream, &patched);
1022+
let backend = Backend::start(HOSTED_UUID, &pristine, &patched, Some(&nupkg));
1023+
let uri = backend.uri();
1024+
let (code, env, _stderr) = socket_patch(&fixture, &store_fx, &["scan","--mode","hosted","--json","--yes","--api-url",&uri,"--org",ORG,"--api-token","fake-token","--patch-server-url",&uri]);
1025+
eprintln!("BH scan code={code:?} redirect={}", env["redirect"]);
1026+
eprintln!("BH config:\n{}", std::fs::read_to_string(fixture.join("nuget.config")).unwrap_or_default());
1027+
let co = sb.dir("checkout");
1028+
fresh_checkout(&fixture, &co);
1029+
if dn.major >= 9 { allow_http_source(&co.join("nuget.config"), HOSTED_UUID); }
1030+
let store_co = sb.dir("store-co");
1031+
let out = dn.restore(&sb, &co, &store_co, &["--locked-mode"]);
1032+
eprintln!("BH cold locked restore: {:?}\n{}", out.status, String::from_utf8_lossy(&out.stdout));
1033+
}

0 commit comments

Comments
 (0)