|
70 | 70 | extra_hosts: Some(extra_hosts), |
71 | 71 | cgroupns_mode: container_req.cgroupns_mode().map(|mode| mode.into()), |
72 | 72 | userns_mode: container_req.userns_mode().map(|v| v.to_string()), |
| 73 | + cap_add: container_req.cap_add().cloned(), |
| 74 | + cap_drop: container_req.cap_drop().cloned(), |
73 | 75 | ..Default::default() |
74 | 76 | }), |
75 | 77 | working_dir: container_req.working_dir().map(|dir| dir.to_string()), |
@@ -574,6 +576,60 @@ mod tests { |
574 | 576 | Ok(()) |
575 | 577 | } |
576 | 578 |
|
| 579 | + #[tokio::test] |
| 580 | + async fn async_run_command_should_have_cap_add() -> anyhow::Result<()> { |
| 581 | + let image = GenericImage::new("hello-world", "latest"); |
| 582 | + let expected_capability = "NET_ADMIN"; |
| 583 | + let container = image |
| 584 | + .with_cap_add(expected_capability.to_string()) |
| 585 | + .start() |
| 586 | + .await?; |
| 587 | + |
| 588 | + let client = Client::lazy_client().await?; |
| 589 | + let container_details = client.inspect(container.id()).await?; |
| 590 | + |
| 591 | + let capabilities = container_details |
| 592 | + .host_config |
| 593 | + .expect("HostConfig") |
| 594 | + .cap_add |
| 595 | + .expect("CapAdd"); |
| 596 | + |
| 597 | + assert_eq!( |
| 598 | + expected_capability, |
| 599 | + capabilities.get(0).expect("No capabilities added"), |
| 600 | + "cap_add must contain {expected_capability}" |
| 601 | + ); |
| 602 | + |
| 603 | + Ok(()) |
| 604 | + } |
| 605 | + |
| 606 | + #[tokio::test] |
| 607 | + async fn async_run_command_should_have_cap_drop() -> anyhow::Result<()> { |
| 608 | + let image = GenericImage::new("hello-world", "latest"); |
| 609 | + let expected_capability = "AUDIT_WRITE"; |
| 610 | + let container = image |
| 611 | + .with_cap_drop(expected_capability.to_string()) |
| 612 | + .start() |
| 613 | + .await?; |
| 614 | + |
| 615 | + let client = Client::lazy_client().await?; |
| 616 | + let container_details = client.inspect(container.id()).await?; |
| 617 | + |
| 618 | + let capabilities = container_details |
| 619 | + .host_config |
| 620 | + .expect("HostConfig") |
| 621 | + .cap_drop |
| 622 | + .expect("CapAdd"); |
| 623 | + |
| 624 | + assert_eq!( |
| 625 | + expected_capability, |
| 626 | + capabilities.get(0).expect("No capabilities dropped"), |
| 627 | + "cap_drop must contain {expected_capability}" |
| 628 | + ); |
| 629 | + |
| 630 | + Ok(()) |
| 631 | + } |
| 632 | + |
577 | 633 | #[tokio::test] |
578 | 634 | async fn async_run_command_should_include_ulimits() -> anyhow::Result<()> { |
579 | 635 | let image = GenericImage::new("hello-world", "latest"); |
|
0 commit comments