Загрузка данных


package ru.domrf.elka.user_session;

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.TestPropertySource;

/**
 * Интеграционный тест Spring Boot
 */
@SpringBootTest
@ActiveProfiles({"test"})
@TestPropertySource(properties = {"spring.config.location = classpath:application-test.yml"})
public interface SpringBootIT extends IntegrationTest {
}



package ru.domrf.elka.user_session;

/**
 * Интеграционный тест
 *
 * @author Сергей Николаев
 */
public interface IntegrationTest {

}

spring:
  cloud:
    vault:
      enabled: false
  application:
    name: "elka-${STAND:local}-user-session"
  security:
    oauth2:
      resource-server:
        jwt:
          issuer-uri: http://localhost:8080
          jwk-set-uri: http://localhost:8080
      client:
        registration:
          keycloak:
            provider: keycloak
            clientId: user-session
            clientSecret: secret
            authorizationGrantType: client_credentials
        provider:
          keycloak:
            token-uri: http://localhost:8080
  liquibase:
    drop-first: false
    enabled: false
  redis:
    mode: standalone
    host: localhost
    port: 6379
    cluster-nodes: localhost:6379


lib-rest-api:
  version: 1.0.0
  api:
    path: "/api"
    actuator: "/actuator"
    health: "/health"
    metrics: "/metrics"
    prometheus: "/prometheus"

keycloak:
  auth-server-url: http://localhost:8484/auth/realms/
  realm: elka_test
  client-id: elka.user-session
  client-secret: 91428589-6686-4e06
  scope: "openid profile email"
  response-type: "code"

integration:
  rest:
    role-model:
      path: http://localhost:8080
      user-roles: /v1/users/%s/roles
    sync-gateway:
      path: http://localhost:8080
      organizations: /v2/organizations
      organizations-timeout: 10000
      accounts: /v5/accounts
      accounts-timeout: 10000
      users: /v1/users/%s/%s
      users-timeout: 10000

user-session:
  v1:
    userInfo: http

security:
  http:
    check-bearer-token: false
    enable-s2s-auth: false
    user-info:
      check-signature: false

app:
  version: 1.0.0
  session-expiration-delta-per-sec: 10
  user-request-duration: 10
  api:
    v1:
      login: "/v1/login"
      callback-login: "/v1/callback-login"
      auth: "/v1/auth"
      check-session: "/v1/check-session"
      userinfo: "/v1/userinfo"
      logout: "/v1/logout"
      callback-logout: "/v1/callback-logout"
      callback-back-channel: "/v1/callback-backchannel"
    v2:
      auth: "/v2/auth"
    v3:
      auth: "/v3/auth"

async:
  corePoolSize: 5
  maxPoolSize: 10
  queueCapacity: 25

allowed-redirect-url-list:

event-logging:
  console:
    enabled: true

package ru.domrf.elka.user_session.test_data;

import lombok.NoArgsConstructor;
import lombok.NonNull;
import org.keycloak.representations.AccessTokenResponse;
import org.springframework.lang.Nullable;
import ru.domrf.elka.user_session.model.Session;
import ru.domrf.elka.user_session.model.SessionScopes;

import java.time.ZonedDateTime;

import static java.util.Objects.requireNonNull;
import static java.util.UUID.randomUUID;
import static lombok.AccessLevel.PRIVATE;
import static ru.domrf.elka.user_session.test_data.AccessTokenResponseTestData.expectedAccessTokenResponse;
import static ru.domrf.elka.user_session.test_data.CurrentSessionTestData.CURRENT_DOMLOGIN_SESSION_ID;
import static ru.domrf.elka.user_session.test_data.CurrentSessionTestData.CURRENT_SESSION_ID;
import static ru.domrf.elka.user_session.test_data.RoleSessionScopeTestData.twoRolesScopeTestData;
import static ru.domrf.elka.user_session.test_data.SessionScopesTestData.sessionScopesTestData;
import static ru.domrf.elka.user_session.test_data.SessionScopesTestData.sessionScopesWithAccountTestData;
import static ru.domrf.elka.user_session.test_data.SessionScopesTestData.sessionScopesWithOneRoleAndAllScopesTestData;
import static ru.domrf.elka.user_session.test_data.SessionScopesTestData.sessionScopesWithOrganizationTestData;
import static ru.domrf.elka.user_session.test_data.SessionScopesTestData.sessionScopesWithTwoRolesAndAllScopesTestData;

/**
 * Тестовые данные {@link Session}.
 */
@NoArgsConstructor(access = PRIVATE)
public class SessionTestData {

    public static final String ACCESS_EXPIRED = "2022-11-17T13:16:03Z[UTC]";
    public static final ZonedDateTime ACCESS_EXPIRED_DATE_TIME = ZonedDateTime.parse(ACCESS_EXPIRED);

    @NonNull
    public static Session sessionRandomId() {
        final var session = sessionNotNullId();
        session.setId(randomUUID().toString());
        return session;
    }

    @NonNull
    public static Session sessionNotNullId() {
        return instance(CURRENT_SESSION_ID, expectedAccessTokenResponse(),
                sessionScopesTestData(false));
    }

    @NonNull
    public static Session sessionIdNotNullHaveRole() {
        return instance(CURRENT_SESSION_ID, expectedAccessTokenResponse(), sessionScopesTestData(true));
    }

    @NonNull
    public static Session sessionWithTwoRole() {
        final var scope = sessionScopesTestData(true);
        scope.setRoles(twoRolesScopeTestData());

        return instance(CURRENT_SESSION_ID, expectedAccessTokenResponse(), scope);
    }

    @NonNull
    public static Session sessionIdNotNullEmptyRole() {
        return instance(CURRENT_SESSION_ID, expectedAccessTokenResponse(),
                sessionScopesTestData(false));
    }

    @NonNull
    public static Session sessionIsNullIdHaveRole() {
        return instance(null, expectedAccessTokenResponse(), sessionScopesTestData(true));
    }

    @NonNull
    public static Session sessionIsNullIdEmptyRole() {
        return instance(null, expectedAccessTokenResponse(),
                sessionScopesTestData(false));
    }

    @NonNull
    public static Session emptySessionWithId(@NonNull final String sessionId) {
        final Session instance = new Session();
        instance.setId(sessionId);
        instance.setDomLoginSessionId(CURRENT_DOMLOGIN_SESSION_ID);
        instance.setScopes(new SessionScopes());
        return instance;
    }

    @NonNull
    public static Session sessionWithAllScopesAndOneRole() {
        return instance(CURRENT_SESSION_ID, expectedAccessTokenResponse(),
                sessionScopesWithOneRoleAndAllScopesTestData());
    }

    @NonNull
    public static Session sessionWithAllScopesAndTwoRoles() {
        return instance(CURRENT_SESSION_ID, expectedAccessTokenResponse(),
                sessionScopesWithTwoRolesAndAllScopesTestData());
    }

    @NonNull
    public static Session sessionWithOrganizationScopes() {
        var scopes = sessionScopesWithOrganizationTestData();
        scopes.setRoles(twoRolesScopeTestData());
        return instance(CURRENT_SESSION_ID, expectedAccessTokenResponse(),
                scopes);
    }

    @NonNull
    public static Session sessionWithAccountScopes() {
        var scope = sessionScopesWithAccountTestData();
        scope.setRoles(twoRolesScopeTestData());
        return instance(CURRENT_SESSION_ID, expectedAccessTokenResponse(), scope);
    }

    @NonNull
    private static Session instance(@Nullable final String sessionId,
                                    @Nullable final AccessTokenResponse accessTokenResponse,
                                    @NonNull final SessionScopes scopes) {
        final Session instance = new Session();
        instance.setId(sessionId);
        instance.setDomLoginSessionId(CURRENT_DOMLOGIN_SESSION_ID);
        instance.setExpiresIn(200L);
        instance.setRefreshExpiresIn(requireNonNull(accessTokenResponse).getRefreshExpiresIn());
        instance.setAccessToken(accessTokenResponse.getToken());
        instance.setRefreshToken(accessTokenResponse.getRefreshToken());
        instance.setNotBeforePolicy(accessTokenResponse.getNotBeforePolicy());
        instance.setTokenType(accessTokenResponse.getTokenType());
        instance.setSessionState(accessTokenResponse.getSessionState());
        instance.setExpireDateTime(CurrentSessionTestData.CURRENT_SESSION_EXPIRED_DATETIME);
        instance.setAccessExpireDateTime(SessionTestData.ACCESS_EXPIRED_DATE_TIME);
        instance.setScopes(scopes);
        return instance;
    }

}