channel collab user roles test

PHOTO EMBED

Fri Sep 01 2023 10:21:06 GMT+0000 (Coordinated Universal Time)

Saved by @thanuj

package com.modeln.channelcollab.junit;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.modeln.channelnetwork.junit.graphql.AbstractChannelNetworkTest;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.BasicNameValuePair;
import org.json.JSONObject;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

@ExtendWith(SpringExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Tag("channelcollab")
public class ChannelCollaborationUserRolesTest extends AbstractChannelNetworkTest
{

    private static String token, url, expected, testDataPath = "src/test/resources/com/modeln/cdm/junit/channelcollab/keyCloakResource.json";

    private static List expectedList;

    @BeforeAll
    public void getExpectedData() throws Exception
    {
        expected = ReadResource(testDataPath);
        expectedList = List.of((expected.substring(1, expected.length() - 1)).split(","));
    }

    private static boolean checkSubListstring(List<String> mainList, List<String> subList)
    {
        return (mainList.containsAll(subList));
    }

    private String ReadResource(String s) throws Exception
    {
        JsonParser parser = new JsonParser();
        Object obj = parser.parse(new FileReader(s));
        JsonObject jsonObject = (JsonObject) obj;
        Object type = jsonObject.get("key");
        String roles = type.toString();
        return roles;
    }

    private List<String> LoadEntitlements(String url, String token) throws IOException, org.apache.hc.core5.http.ParseException
    {
        CloseableHttpClient client = HttpClientBuilder.create().build();
        HttpPost post = new HttpPost(url);
        ArrayList<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
        parameters.add(new BasicNameValuePair("grant_type", "urn:ietf:params:oauth:grant-type:uma-ticket"));
        parameters.add(new BasicNameValuePair("client_id", "ChannelNetwork"));
        parameters.add(new BasicNameValuePair("audience", "ChannelNetwork"));
        post.addHeader("Authorization", token);
        post.addHeader("Content-Type", "application/x-www-form-urlencoded");
        parameters.add(new BasicNameValuePair("client_secret", getEnvironment().getProperty("cthKeySecret")));
        post.setEntity(new UrlEncodedFormEntity(parameters));
        HttpResponse response = client.execute(post);
        HttpEntity entity = ((CloseableHttpResponse) response).getEntity();
        String body = EntityUtils.toString(entity, "UTF-8");
        JSONObject obj = new JSONObject(body);
        System.out.println(obj);
        String access_token = obj.getString("access_token");
        String[] tokenParts = access_token.split("\\.");
        Base64.Decoder decoder = Base64.getUrlDecoder();
        String payLoad = new String(decoder.decode(tokenParts[1]));
        JsonParser parser = new JsonParser();
        Object object = parser.parse(payLoad);
        JsonObject jsonObject = (JsonObject) object;
        JsonObject a = jsonObject.getAsJsonObject("authorization");
        JsonArray jsonArray = a.getAsJsonArray("permissions");
        List<String> rsNamesList = new ArrayList<>();
        for (int i = 0; i < jsonArray.size(); i++)
        {
            JsonElement jsonElement = jsonArray.get(i);
            JsonObject names = jsonElement.getAsJsonObject();
            rsNamesList.add(names.get("rsname").toString());
        }
        return rsNamesList;
    }

    @Test
    public void MfrKeyCloakUserTest() throws Exception
    {
        token = generateCTHManufacturerToken();
        url = getEnvironment().getProperty("cthKeyCloakUrl");
        List<String> decodedToken = LoadEntitlements(url, token);
        Assert.assertTrue("token expected here",decodedToken.size() > 0);
        boolean isSubArray = checkSubListstring(decodedToken, expectedList);
        Assert.assertTrue("Expected keycloak source and received keycloak source are different", isSubArray);
    }

    @Test
    public void InowBaseNotKeyCloakUserTest() throws Exception
    {
        token = generateInowDataOwnerBaseToken();
        url = getEnvironment().getProperty("inowKeyCloakUrl");
        List<String> decodedToken = LoadEntitlements(url, token);
        Assert.assertTrue("token expected here",decodedToken.size() > 0);
        boolean isSubArray = checkSubListstring(decodedToken, expectedList);
        Assert.assertFalse("Expected keycloak source and received keycloak source are different", isSubArray);
    }

    @Test
    public void CTHPartnerNotKeyCloakUserTest() throws Exception
    {
        token = generateCTHPartnerToken();
        url = getEnvironment().getProperty("cthKeyCloakUrl");
        List<String> decodedToken = LoadEntitlements(url, token);
        Assert.assertTrue("token expected here",decodedToken.size() > 0);
        boolean isSubArray = checkSubListstring(decodedToken, expectedList);
        Assert.assertFalse("Expected keycloak source and received keycloak source are different", isSubArray);
    }

    @Test
    public void test() throws Exception
    {
        token = generateTestToken();
        System.out.println("token : "+token);
        url = getEnvironment().getProperty("cthKeyCloakUrl");
        List<String> decodedToken = LoadEntitlements(url, token);
        Assert.assertTrue("token expected here",decodedToken.size() > 0);
        boolean isSubArray = checkSubListstring(decodedToken, expectedList);
        Assert.assertFalse("Expected keycloak source and received keycloak source are different", isSubArray);
    }
}
content_copyCOPY