|
66 | 66 | import dev.cel.expr.Expr; |
67 | 67 |
|
68 | 68 | import java.io.IOException; |
| 69 | +import java.security.GeneralSecurityException; |
69 | 70 | import java.time.Duration; |
70 | 71 | import java.util.Base64; |
71 | 72 | import java.util.Map; |
@@ -589,7 +590,7 @@ private static void triggerConcurrentRefresh( |
589 | 590 | } |
590 | 591 |
|
591 | 592 | @Test |
592 | | - public void generateToken() throws Exception { |
| 593 | + public void generateToken_withAvailablityCondition_success() throws Exception { |
593 | 594 | MockStsTransportFactory transportFactory = new MockStsTransportFactory(); |
594 | 595 | transportFactory.transport.setReturnAccessBoundarySessionKey(true); |
595 | 596 |
|
@@ -662,7 +663,7 @@ public void generateToken() throws Exception { |
662 | 663 | } |
663 | 664 |
|
664 | 665 | @Test |
665 | | - public void generateToken_withoutAvailabilityCondition() throws Exception { |
| 666 | + public void generateToken_withoutAvailabilityCondition_success() throws Exception { |
666 | 667 | MockStsTransportFactory transportFactory = new MockStsTransportFactory(); |
667 | 668 | transportFactory.transport.setReturnAccessBoundarySessionKey(true); |
668 | 669 |
|
@@ -719,7 +720,7 @@ public void generateToken_withoutAvailabilityCondition() throws Exception { |
719 | 720 | } |
720 | 721 |
|
721 | 722 | @Test |
722 | | - public void generateToken_withInvalidCelExpression() throws Exception { |
| 723 | + public void generateToken_withInvalidAvailabilityCondition_failure() throws Exception { |
723 | 724 | MockStsTransportFactory transportFactory = new MockStsTransportFactory(); |
724 | 725 | transportFactory.transport.setReturnAccessBoundarySessionKey(true); |
725 | 726 |
|
@@ -756,4 +757,84 @@ public void generateToken_withInvalidCelExpression() throws Exception { |
756 | 757 | assertThrows(CelValidationException.class, |
757 | 758 | () -> { factory.generateToken(accessBoundary); }); |
758 | 759 | } |
| 760 | + |
| 761 | + @Test |
| 762 | + public void generateToken_withSessionKeyNotBase64Encoded_failure() throws Exception { |
| 763 | + MockStsTransportFactory transportFactory = new MockStsTransportFactory(); |
| 764 | + transportFactory.transport.setReturnAccessBoundarySessionKey(true); |
| 765 | + transportFactory.transport.setAccessBoundarySessionKey("invalid_key"); |
| 766 | + |
| 767 | + ClientSideCredentialAccessBoundaryFactory.Builder builder = |
| 768 | + ClientSideCredentialAccessBoundaryFactory.newBuilder(); |
| 769 | + |
| 770 | + ClientSideCredentialAccessBoundaryFactory factory = |
| 771 | + builder |
| 772 | + .setSourceCredential(getServiceAccountSourceCredentials( |
| 773 | + mockTokenServerTransportFactory)) |
| 774 | + .setHttpTransportFactory(transportFactory) |
| 775 | + .build(); |
| 776 | + |
| 777 | + CredentialAccessBoundary.Builder cabBuilder = |
| 778 | + CredentialAccessBoundary.newBuilder(); |
| 779 | + CredentialAccessBoundary accessBoundary = |
| 780 | + cabBuilder |
| 781 | + .addRule( |
| 782 | + CredentialAccessBoundary.AccessBoundaryRule.newBuilder() |
| 783 | + .setAvailableResource("//storage.googleapis.com/projects/" |
| 784 | + + "_/buckets/example-bucket") |
| 785 | + .setAvailablePermissions( |
| 786 | + ImmutableList.of("inRole:roles/storage.objectViewer")) |
| 787 | + .setAvailabilityCondition( |
| 788 | + CredentialAccessBoundary.AccessBoundaryRule |
| 789 | + .AvailabilityCondition.newBuilder() |
| 790 | + .setExpression( |
| 791 | + "resource.name.startsWith('projects/_/" |
| 792 | + + "buckets/example-bucket/objects/customer-a')") |
| 793 | + .build()) |
| 794 | + .build()) |
| 795 | + .build(); |
| 796 | + |
| 797 | + assertThrows(IllegalArgumentException.class, |
| 798 | + () -> { factory.generateToken(accessBoundary); }); |
| 799 | + } |
| 800 | + |
| 801 | + @Test |
| 802 | + public void generateToken_withMalformSessionKey_failure() throws Exception { |
| 803 | + MockStsTransportFactory transportFactory = new MockStsTransportFactory(); |
| 804 | + transportFactory.transport.setReturnAccessBoundarySessionKey(true); |
| 805 | + transportFactory.transport.setAccessBoundarySessionKey("aW52YWxpZF9rZXk="); |
| 806 | + |
| 807 | + ClientSideCredentialAccessBoundaryFactory.Builder builder = |
| 808 | + ClientSideCredentialAccessBoundaryFactory.newBuilder(); |
| 809 | + |
| 810 | + ClientSideCredentialAccessBoundaryFactory factory = |
| 811 | + builder |
| 812 | + .setSourceCredential(getServiceAccountSourceCredentials( |
| 813 | + mockTokenServerTransportFactory)) |
| 814 | + .setHttpTransportFactory(transportFactory) |
| 815 | + .build(); |
| 816 | + |
| 817 | + CredentialAccessBoundary.Builder cabBuilder = |
| 818 | + CredentialAccessBoundary.newBuilder(); |
| 819 | + CredentialAccessBoundary accessBoundary = |
| 820 | + cabBuilder |
| 821 | + .addRule( |
| 822 | + CredentialAccessBoundary.AccessBoundaryRule.newBuilder() |
| 823 | + .setAvailableResource("//storage.googleapis.com/projects/" |
| 824 | + + "_/buckets/example-bucket") |
| 825 | + .setAvailablePermissions( |
| 826 | + ImmutableList.of("inRole:roles/storage.objectViewer")) |
| 827 | + .setAvailabilityCondition( |
| 828 | + CredentialAccessBoundary.AccessBoundaryRule |
| 829 | + .AvailabilityCondition.newBuilder() |
| 830 | + .setExpression( |
| 831 | + "resource.name.startsWith('projects/_/" |
| 832 | + + "buckets/example-bucket/objects/customer-a')") |
| 833 | + .build()) |
| 834 | + .build()) |
| 835 | + .build(); |
| 836 | + |
| 837 | + assertThrows(GeneralSecurityException.class, |
| 838 | + () -> { factory.generateToken(accessBoundary); }); |
| 839 | + } |
759 | 840 | } |
0 commit comments