|
9 | 9 | import org.elasticsearch.action.ActionRequestValidationException;
|
10 | 10 | import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
11 | 11 | import org.elasticsearch.test.ESTestCase;
|
| 12 | +import org.elasticsearch.xpack.idp.saml.support.SamlInitiateSingleSignOnAttributes; |
| 13 | + |
| 14 | +import java.util.ArrayList; |
| 15 | +import java.util.Arrays; |
| 16 | +import java.util.Collections; |
| 17 | +import java.util.List; |
12 | 18 |
|
13 | 19 | import static org.hamcrest.CoreMatchers.containsString;
|
14 | 20 | import static org.hamcrest.CoreMatchers.equalTo;
|
@@ -39,4 +45,38 @@ public void testValidation() {
|
39 | 45 | assertThat(validationException.validationErrors().get(0), containsString("entity_id is missing"));
|
40 | 46 | assertThat(validationException.validationErrors().get(1), containsString("acs is missing"));
|
41 | 47 | }
|
| 48 | + |
| 49 | + public void testDuplicateAttributeKeysValidation() { |
| 50 | + // Create request with valid required fields |
| 51 | + final SamlInitiateSingleSignOnRequest request = new SamlInitiateSingleSignOnRequest(); |
| 52 | + request.setSpEntityId("https://kibana_url"); |
| 53 | + request.setAssertionConsumerService("https://kibana_url/acs"); |
| 54 | + |
| 55 | + // Test with unique attribute keys - should be valid |
| 56 | + SamlInitiateSingleSignOnAttributes attributes = new SamlInitiateSingleSignOnAttributes(); |
| 57 | + List<SamlInitiateSingleSignOnAttributes.Attribute> attributeList = new ArrayList<>(); |
| 58 | + attributeList.add(new SamlInitiateSingleSignOnAttributes.Attribute("key1", Collections.singletonList("value1"))); |
| 59 | + attributeList.add(new SamlInitiateSingleSignOnAttributes.Attribute("key2", Arrays.asList("value2A", "value2B"))); |
| 60 | + attributes.setAttributes(attributeList); |
| 61 | + request.setAttributes(attributes); |
| 62 | + |
| 63 | + // Should pass validation |
| 64 | + ActionRequestValidationException validationException = request.validate(); |
| 65 | + assertNull("Request with unique attribute keys should pass validation", validationException); |
| 66 | + |
| 67 | + // Test with duplicate attribute keys - should be invalid |
| 68 | + attributes = new SamlInitiateSingleSignOnAttributes(); |
| 69 | + attributeList = new ArrayList<>(); |
| 70 | + attributeList.add(new SamlInitiateSingleSignOnAttributes.Attribute("duplicate_key", Collections.singletonList("value1"))); |
| 71 | + attributeList.add(new SamlInitiateSingleSignOnAttributes.Attribute("unique_key", Collections.singletonList("value2"))); |
| 72 | + attributeList.add(new SamlInitiateSingleSignOnAttributes.Attribute("duplicate_key", Arrays.asList("value3", "value4"))); |
| 73 | + attributes.setAttributes(attributeList); |
| 74 | + request.setAttributes(attributes); |
| 75 | + |
| 76 | + // Should fail validation with appropriate error message |
| 77 | + validationException = request.validate(); |
| 78 | + assertNotNull("Request with duplicate attribute keys should fail validation", validationException); |
| 79 | + assertThat(validationException.validationErrors().size(), equalTo(1)); |
| 80 | + assertThat(validationException.validationErrors().get(0), containsString("duplicate attribute key [duplicate_key] found")); |
| 81 | + } |
42 | 82 | }
|
0 commit comments