Skip to content

Commit

Permalink
Add unit tests for user defined federated Authenticators.
Browse files Browse the repository at this point in the history
  • Loading branch information
Thisara-Welmilla committed Nov 19, 2024
1 parent e501367 commit 13333d5
Show file tree
Hide file tree
Showing 7 changed files with 963 additions and 4 deletions.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
import org.wso2.carbon.automation.engine.context.TestUserMode;
import org.wso2.identity.integration.test.rest.api.server.idp.v1.model.AuthenticationType;
import org.wso2.identity.integration.test.rest.api.server.idp.v1.model.Endpoint;
import org.wso2.identity.integration.test.rest.api.server.idp.v1.model.FederatedAuthenticatorRequest;
import org.wso2.identity.integration.test.rest.api.server.idp.v1.util.UserDefinedAuthenticatorPayload;

import java.io.IOException;
import java.util.HashMap;
Expand All @@ -45,7 +49,19 @@
public class IdPSuccessTest extends IdPTestBase {

private String idPId;
private String customIdPId;
private String idPTemplateId;
private UserDefinedAuthenticatorPayload userDefinedAuthenticatorPayload;
private String idpCreatePayload;

private static final String FEDERATED_AUTHENTICATOR_ID_PLACEHOLDER = "<FEDERATED_AUTHENTICATOR_ID>";
private static final String FEDERATED_AUTHENTICATOR_PLACEHOLDER = "\"<FEDERATED_AUTHENTICATOR>\"";
private static final String FEDERATED_AUTHENTICATOR_ID = "Y3VzdG9tQXV0aGVudGljYXRvcg==";
private static final String ENDPOINT_URI = "https://abc.com/authenticate";
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
private static final String USERNAME_VALUE = "testUser";
private static final String PASSWORD_VALUE = "testPassword";

@Factory(dataProvider = "restAPIUserConfigProvider")
public IdPSuccessTest(TestUserMode userMode) throws Exception {
Expand All @@ -61,6 +77,30 @@ public IdPSuccessTest(TestUserMode userMode) throws Exception {
public void init() throws IOException {

super.testInit(API_VERSION, swaggerDefinition, tenant);
userDefinedAuthenticatorPayload = createUserDefinedAuthenticatorPayload();
idpCreatePayload = readResource("add-idp-with-custom-fed-auth.json");

}

private UserDefinedAuthenticatorPayload createUserDefinedAuthenticatorPayload() {

UserDefinedAuthenticatorPayload userDefinedAuthenticatorPayload = new UserDefinedAuthenticatorPayload();
userDefinedAuthenticatorPayload.setIsEnabled(true);
userDefinedAuthenticatorPayload.setAuthenticatorId(FEDERATED_AUTHENTICATOR_ID);
userDefinedAuthenticatorPayload.setDefinedBy(FederatedAuthenticatorRequest.DefinedByEnum.USER.toString());

Endpoint endpoint = new Endpoint();
endpoint.setUri(ENDPOINT_URI);
AuthenticationType authenticationType = new AuthenticationType();
authenticationType.setType(AuthenticationType.TypeEnum.BASIC);
Map<String, Object> properties = new HashMap<>();
properties.put(USERNAME, USERNAME_VALUE);
properties.put(PASSWORD, PASSWORD_VALUE);
authenticationType.setProperties(properties);
endpoint.authentication(authenticationType);
userDefinedAuthenticatorPayload.setEndpoint(endpoint);

return userDefinedAuthenticatorPayload;
}

@AfterClass(alwaysRun = true)
Expand Down Expand Up @@ -256,6 +296,26 @@ public void testGetMetaOutboundConnector() throws IOException {
.body("rulesEnabled", equalTo(false));
}

@Test
public void testAddIdPWithUserDefinedAuthenticator() throws IOException {

String body = idpCreatePayload.replace(FEDERATED_AUTHENTICATOR_ID_PLACEHOLDER,
userDefinedAuthenticatorPayload.getAuthenticatorId());
body = body.replace(FEDERATED_AUTHENTICATOR_PLACEHOLDER,
userDefinedAuthenticatorPayload.convertToJasonPayload());
Response response = getResponseOfPost(IDP_API_BASE_PATH, body);
response.then()
.log().ifValidationFails()
.assertThat()
.statusCode(HttpStatus.SC_CREATED)
.header(HttpHeaders.LOCATION, notNullValue());

String location = response.getHeader(HttpHeaders.LOCATION);
assertNotNull(location);
customIdPId = location.substring(location.lastIndexOf("/") + 1);
assertNotNull(customIdPId);
}

@Test(dependsOnMethods = {"testGetMetaOutboundConnector"})
public void testAddIdP() throws IOException {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
/*
* Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com).
*
* WSO2 LLC. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.wso2.identity.integration.test.rest.api.server.idp.v1.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlEnumValue;
import javax.xml.bind.annotation.XmlType;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class AuthenticationType {


@XmlType(name="TypeEnum")
@XmlEnum(String.class)
public enum TypeEnum {

@XmlEnumValue("NONE") NONE(String.valueOf("NONE")), @XmlEnumValue("BEARER") BEARER(String.valueOf("BEARER")), @XmlEnumValue("API_KEY") API_KEY(String.valueOf("API_KEY")), @XmlEnumValue("BASIC") BASIC(String.valueOf("BASIC"));


private String value;

TypeEnum(String v) {
value = v;
}

public String value() {
return value;
}

@Override
public String toString() {
return String.valueOf(value);
}

public static TypeEnum fromValue(String value) {
for (TypeEnum b : TypeEnum.values()) {
if (b.value.equals(value)) {
return b;
}
}
throw new IllegalArgumentException("Unexpected value '" + value + "'");
}
}

private TypeEnum type;
private Map<String, Object> properties = new HashMap<>();


/**
**/
public AuthenticationType type(TypeEnum type) {

this.type = type;
return this;
}

@ApiModelProperty(example = "BASIC", required = true, value = "")
@JsonProperty("type")
@Valid
@NotNull(message = "Property type cannot be null.")

public TypeEnum getType() {
return type;
}
public void setType(TypeEnum type) {
this.type = type;
}

/**
**/
public AuthenticationType properties(Map<String, Object> properties) {

this.properties = properties;
return this;
}

@ApiModelProperty(example = "{\"username\":\"auth_username\",\"password\":\"auth_password\"}", required = true, value = "")
@JsonProperty("properties")
@Valid
@NotNull(message = "Property properties cannot be null.")

public Map<String, Object> getProperties() {
return properties;
}
public void setProperties(Map<String, Object> properties) {
this.properties = properties;
}


public AuthenticationType putPropertiesItem(String key, Object propertiesItem) {
this.properties.put(key, propertiesItem);
return this;
}



@Override
public boolean equals(java.lang.Object o) {

if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
AuthenticationType authenticationType = (AuthenticationType) o;
return Objects.equals(this.type, authenticationType.type) &&
Objects.equals(this.properties, authenticationType.properties);
}

@Override
public int hashCode() {
return Objects.hash(type, properties);
}

@Override
public String toString() {

StringBuilder sb = new StringBuilder();
sb.append("class AuthenticationType {\n");

sb.append(" type: ").append(toIndentedString(type)).append("\n");
sb.append(" properties: ").append(toIndentedString(properties)).append("\n");
sb.append("}");
return sb.toString();
}

/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(java.lang.Object o) {

if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/*
* Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com).
*
* WSO2 LLC. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.wso2.identity.integration.test.rest.api.server.idp.v1.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;

import javax.validation.Valid;
import javax.validation.constraints.Pattern;
import java.util.Objects;

public class Endpoint {

private String uri;
private AuthenticationType authentication;

/**
**/
public Endpoint uri(String uri) {

this.uri = uri;
return this;
}

@ApiModelProperty(example = "https://abc.com/token", value = "")
@JsonProperty("uri")
@Valid
@Pattern(regexp="^https?://.+")
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}

/**
**/
public Endpoint authentication(AuthenticationType authentication) {

this.authentication = authentication;
return this;
}

@ApiModelProperty(value = "")
@JsonProperty("authentication")
@Valid
public AuthenticationType getAuthentication() {
return authentication;
}
public void setAuthentication(AuthenticationType authentication) {
this.authentication = authentication;
}



@Override
public boolean equals(java.lang.Object o) {

if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Endpoint endpoint = (Endpoint) o;
return Objects.equals(this.uri, endpoint.uri) &&
Objects.equals(this.authentication, endpoint.authentication);
}

@Override
public int hashCode() {
return Objects.hash(uri, authentication);
}

@Override
public String toString() {

StringBuilder sb = new StringBuilder();
sb.append("class Endpoint {\n");

sb.append(" uri: ").append(toIndentedString(uri)).append("\n");
sb.append(" authentication: ").append(toIndentedString(authentication)).append("\n");
sb.append("}");
return sb.toString();
}

/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(java.lang.Object o) {

if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n");
}
}
Loading

0 comments on commit 13333d5

Please sign in to comment.