Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 5 additions & 6 deletions agent-skills/trino-test/trino-test-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -544,16 +544,15 @@ Use 5-digit number prefix for easy sorting and reference:

#### Issue 3: Docker container startup failure

**Cause**: Port conflicts or insufficient resources
**Cause**: Insufficient resources, or containers left from an earlier run

**Solution**:
```bash
# Cleanup old containers
./integration-test-common/docker-script/shutdown.sh
# Stop an environment started with --env_only
./trino-connector/integration-test/trino-test-tools/trino_integration_test.sh --stop

# Check port usage
lsof -i :8080
lsof -i :9083
# List test containers; Testcontainers removes them once their test JVM is gone
docker ps -a --filter label=org.testcontainers=true
```

## Summary
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,22 +80,20 @@ public void startIntegrationTest() throws Exception {
registerCustomConfigs(configs);

super.startIntegrationTest();
RangerITEnv.init(RangerBaseE2EIT.metalakeName, false);
RangerITEnv.startHiveRangerContainer();
RangerITEnv.init(ranger, RangerBaseE2EIT.metalakeName, false);
hiveRanger = RangerITEnv.startHiveRangerContainer();

HIVE_METASTORE_URIS =
String.format(
"thrift://%s:%d",
containerSuite.getHiveRangerContainer().getContainerIpAddress(),
HiveContainer.HIVE_METASTORE_PORT);
hiveRanger.getContainerIpAddress(), HiveContainer.HIVE_METASTORE_PORT);

generateRangerSparkSecurityXML("authorization-chain");

DEFAULT_FS =
String.format(
"hdfs://%s:%d/user/hive/warehouse",
containerSuite.getHiveRangerContainer().getContainerIpAddress(),
HiveContainer.HDFS_DEFAULTFS_PORT);
hiveRanger.getContainerIpAddress(), HiveContainer.HDFS_DEFAULTFS_PORT);
BaseIT.runInEnv(
"HADOOP_USER_NAME",
"test123",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
import org.apache.gravitino.authorization.common.PathBasedSecurableObject;
import org.apache.gravitino.authorization.ranger.RangerAuthorizationPlugin;
import org.apache.gravitino.catalog.CatalogDispatcher;
import org.apache.gravitino.integration.test.container.RangerContainer;
import org.apache.gravitino.integration.test.container.RangerFixture;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
Expand All @@ -49,6 +51,7 @@
import org.mockito.Mockito;

@Tag("gravitino-docker-test")
@RangerFixture
public class RangerAuthorizationHDFSPluginIT {

private static RangerAuthorizationPlugin rangerAuthPlugin;
Expand All @@ -57,8 +60,8 @@ public class RangerAuthorizationHDFSPluginIT {
private static CatalogDispatcher previousInternalCatalogDispatcher;

@BeforeAll
public static void setup() throws Exception {
RangerITEnv.init(RangerITEnv.currentFunName(), true);
public static void setup(RangerContainer ranger) throws Exception {
RangerITEnv.init(ranger, RangerITEnv.currentFunName(), true);
rangerAuthPlugin = RangerITEnv.rangerAuthHDFSPlugin;
previousCatalogDispatcher =
(CatalogDispatcher)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,22 @@
import org.apache.gravitino.authorization.ranger.RangerAuthorizationPlugin;
import org.apache.gravitino.authorization.ranger.RangerHadoopSQLMetadataObject;
import org.apache.gravitino.authorization.ranger.RangerHelper;
import org.apache.gravitino.integration.test.container.RangerContainer;
import org.apache.gravitino.integration.test.container.RangerFixture;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Tag("gravitino-docker-test")
@RangerFixture
public class RangerAuthorizationPluginIT {
private static RangerAuthorizationPlugin rangerAuthPlugin;

@BeforeAll
public static void setup() {
RangerITEnv.init(RangerITEnv.currentFunName(), true);
public static void setup(RangerContainer ranger) {
RangerITEnv.init(ranger, RangerITEnv.currentFunName(), true);
rangerAuthPlugin = RangerITEnv.rangerAuthHivePlugin;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@
import org.apache.gravitino.authorization.SecurableObject;
import org.apache.gravitino.authorization.SecurableObjects;
import org.apache.gravitino.client.GravitinoMetalake;
import org.apache.gravitino.integration.test.container.FixtureContainer;
import org.apache.gravitino.integration.test.container.HiveContainer;
import org.apache.gravitino.integration.test.container.RangerContainer;
import org.apache.gravitino.integration.test.container.RangerFixture;
import org.apache.gravitino.integration.test.util.BaseIT;
import org.apache.gravitino.integration.test.util.GravitinoITUtils;
import org.apache.gravitino.rel.TableChange;
Expand All @@ -54,6 +58,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RangerFixture
public abstract class RangerBaseE2EIT extends BaseIT {
private static final Logger LOG = LoggerFactory.getLogger(RangerBaseE2EIT.class);
public static final String catalogName = GravitinoITUtils.genRandomName("catalog").toLowerCase();
Expand Down Expand Up @@ -105,6 +110,11 @@ public abstract class RangerBaseE2EIT extends BaseIT {

protected static final String SQL_DROP_TABLE = String.format("DROP TABLE %s", tableName);

@FixtureContainer protected RangerContainer ranger;

// The Ranger-enabled Hive; subclasses start it after RangerITEnv.init().
protected static HiveContainer hiveRanger;

protected static void generateRangerSparkSecurityXML(String modeName) throws IOException {
String templatePath =
String.join(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@
import org.apache.gravitino.client.GravitinoMetalake;
import org.apache.gravitino.file.Fileset;
import org.apache.gravitino.file.FilesetChange;
import org.apache.gravitino.integration.test.container.FixtureContainer;
import org.apache.gravitino.integration.test.container.HiveContainer;
import org.apache.gravitino.integration.test.container.RangerContainer;
import org.apache.gravitino.integration.test.container.RangerFixture;
import org.apache.gravitino.integration.test.util.BaseIT;
import org.apache.gravitino.integration.test.util.GravitinoITUtils;
import org.apache.hadoop.conf.Configuration;
Expand All @@ -73,6 +75,7 @@
import org.slf4j.LoggerFactory;

@Tag("gravitino-docker-test")
@RangerFixture
public class RangerFilesetIT extends BaseIT {
private static final Logger LOG = LoggerFactory.getLogger(RangerFilesetIT.class);

Expand All @@ -85,6 +88,8 @@ public class RangerFilesetIT extends BaseIT {
private FileSystem fileSystem;
private GravitinoMetalake metalake;
private Catalog catalog;
@FixtureContainer private RangerContainer ranger;
private static HiveContainer hiveRanger;

@BeforeAll
public void startIntegrationTest() throws Exception {
Expand All @@ -100,13 +105,11 @@ public void startIntegrationTest() throws Exception {
registerCustomConfigs(configs);
super.startIntegrationTest();

RangerITEnv.init(metalakeName, false);
RangerITEnv.startHiveRangerContainer();
RangerITEnv.init(ranger, metalakeName, false);
hiveRanger = RangerITEnv.startHiveRangerContainer();

RANGER_ADMIN_URL =
String.format(
"http://%s:%d",
containerSuite.getRangerContainer().getContainerIpAddress(), RANGER_SERVER_PORT);
String.format("http://%s:%d", ranger.getContainerIpAddress(), RANGER_SERVER_PORT);

Configuration conf = new Configuration();
conf.set("fs.defaultFS", defaultBaseLocation());
Expand Down Expand Up @@ -599,7 +602,7 @@ private String defaultBaseLocation() {
defaultBaseLocation =
String.format(
"hdfs://%s:%d/user/hadoop/%s",
containerSuite.getHiveRangerContainer().getContainerIpAddress(),
hiveRanger.getContainerIpAddress(),
HiveContainer.HDFS_DEFAULTFS_PORT,
schemaName.toLowerCase());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,13 @@ public void startIntegrationTest() throws Exception {
registerCustomConfigs(configs);
super.startIntegrationTest();

RangerITEnv.init(RangerBaseE2EIT.metalakeName, true);
RangerITEnv.startHiveRangerContainer();
RangerITEnv.init(ranger, RangerBaseE2EIT.metalakeName, true);
hiveRanger = RangerITEnv.startHiveRangerContainer();

HIVE_METASTORE_URIS =
String.format(
"thrift://%s:%d",
containerSuite.getHiveRangerContainer().getContainerIpAddress(),
HiveContainer.HIVE_METASTORE_PORT);
hiveRanger.getContainerIpAddress(), HiveContainer.HIVE_METASTORE_PORT);

generateRangerSparkSecurityXML("authorization-ranger");

Expand All @@ -85,8 +84,7 @@ public void startIntegrationTest() throws Exception {
"spark.sql.warehouse.dir",
String.format(
"hdfs://%s:%d/user/hive/warehouse",
containerSuite.getHiveRangerContainer().getContainerIpAddress(),
HiveContainer.HDFS_DEFAULTFS_PORT))
hiveRanger.getContainerIpAddress(), HiveContainer.HDFS_DEFAULTFS_PORT))
.config("spark.sql.storeAssignmentPolicy", "LEGACY")
.config("mapreduce.input.fileinputformat.input.dir.recursive", "true")
.config(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,20 +94,18 @@ public void startIntegrationTest() throws Exception {
registerCustomConfigs(configs);

super.startIntegrationTest();
RangerITEnv.init(RangerBaseE2EIT.metalakeName, false);
RangerITEnv.startHiveRangerContainer();
RangerITEnv.init(ranger, RangerBaseE2EIT.metalakeName, false);
hiveRanger = RangerITEnv.startHiveRangerContainer();

DEFAULT_FS =
String.format(
"hdfs://%s:%d/user/hive/warehouse",
containerSuite.getHiveRangerContainer().getContainerIpAddress(),
HiveContainer.HDFS_DEFAULTFS_PORT);
hiveRanger.getContainerIpAddress(), HiveContainer.HDFS_DEFAULTFS_PORT);

HIVE_METASTORE_URIS =
String.format(
"thrift://%s:%d",
containerSuite.getHiveRangerContainer().getContainerIpAddress(),
HiveContainer.HIVE_METASTORE_PORT);
hiveRanger.getContainerIpAddress(), HiveContainer.HIVE_METASTORE_PORT);

createMetalake();
createCatalog();
Expand Down Expand Up @@ -364,8 +362,7 @@ private void initSparkSession() {
"spark.sql.warehouse.dir",
String.format(
"hdfs://%s:%d/user/hive/warehouse",
containerSuite.getHiveRangerContainer().getContainerIpAddress(),
HiveContainer.HDFS_DEFAULTFS_PORT))
hiveRanger.getContainerIpAddress(), HiveContainer.HDFS_DEFAULTFS_PORT))
.config("spark.sql.storeAssignmentPolicy", "LEGACY")
.config("mapreduce.input.fileinputformat.input.dir.recursive", "true")
.enableHiveSupport()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import org.apache.gravitino.connector.authorization.BaseAuthorization;
import org.apache.gravitino.exceptions.AuthorizationPluginException;
import org.apache.gravitino.integration.test.container.RangerContainer;
import org.apache.gravitino.integration.test.container.RangerFixture;
import org.apache.gravitino.integration.test.util.GravitinoITUtils;
import org.apache.gravitino.meta.AuditInfo;
import org.apache.gravitino.meta.GroupEntity;
Expand All @@ -83,6 +84,7 @@
import org.slf4j.LoggerFactory;

@Tag("gravitino-docker-test")
@RangerFixture
public class RangerHiveIT {
private static final Logger LOG = LoggerFactory.getLogger(RangerHiveIT.class);

Expand All @@ -92,8 +94,8 @@ public class RangerHiveIT {
AuditInfo.builder().withCreator("test").withCreateTime(Instant.now()).build();

@BeforeAll
public static void setup() {
RangerITEnv.init(RangerITEnv.currentFunName(), true);
public static void setup(RangerContainer ranger) {
RangerITEnv.init(ranger, RangerITEnv.currentFunName(), true);

rangerAuthHivePlugin = RangerITEnv.rangerAuthHivePlugin;
rangerHelper = RangerITEnv.rangerHelper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,12 @@
import org.apache.gravitino.authorization.ranger.RangerPrivileges;
import org.apache.gravitino.authorization.ranger.reference.RangerDefines;
import org.apache.gravitino.connector.authorization.BaseAuthorization;
import org.apache.gravitino.integration.test.container.ContainerSpec;
import org.apache.gravitino.integration.test.container.ContainerSuite;
import org.apache.gravitino.integration.test.container.HiveAuth;
import org.apache.gravitino.integration.test.container.HiveContainer;
import org.apache.gravitino.integration.test.container.HiveSpec;
import org.apache.gravitino.integration.test.container.HiveVersion;
import org.apache.gravitino.integration.test.container.RangerContainer;
import org.apache.gravitino.integration.test.container.TrinoContainer;
import org.apache.ranger.RangerClient;
Expand All @@ -60,14 +64,14 @@ public class RangerITEnv {
private static final Logger LOG = LoggerFactory.getLogger(RangerITEnv.class);
protected static final String RANGER_TRINO_REPO_NAME = "trinoDev";
private static final String RANGER_TRINO_TYPE = "trino";
public static final String RANGER_HIVE_REPO_NAME = "hiveDev";
public static final String RANGER_HIVE_REPO_NAME = RangerContainer.HIVE_REPOSITORY;
private static final String RANGER_HIVE_TYPE = "hive";
public static final String RANGER_HDFS_REPO_NAME = "hdfsDev";
public static final String RANGER_HDFS_REPO_NAME = RangerContainer.HDFS_REPOSITORY;
public static final String METALAKE_ID = "1000";
public static final String CATALOG_ID = "1001";
private static final String RANGER_HDFS_TYPE = "hdfs";
public static RangerClient rangerClient;
public static final String HADOOP_USER_NAME = "gravitino";
public static final String HADOOP_USER_NAME = RangerContainer.HADOOP_USER;
private static volatile boolean initRangerService = false;
private static final ContainerSuite containerSuite = ContainerSuite.getInstance();

Expand All @@ -92,14 +96,14 @@ public class RangerITEnv {
protected static RangerHelper rangerHelper;
protected static RangerHelper rangerHDFSHelper;
public static String RANGER_ADMIN_URL = null;
private static RangerContainer rangerContainer;

public static void init(String metalakeName, boolean allowAnyoneAccessHDFS) {
containerSuite.startRangerContainer();
public static void init(
RangerContainer ranger, String metalakeName, boolean allowAnyoneAccessHDFS) {
rangerContainer = ranger;
RANGER_ADMIN_URL =
String.format(
"http://%s:%d",
containerSuite.getRangerContainer().getContainerIpAddress(), RANGER_SERVER_PORT);
rangerClient = containerSuite.getRangerContainer().rangerClient;
String.format("http://%s:%d", rangerContainer.getContainerIpAddress(), RANGER_SERVER_PORT);
rangerClient = rangerContainer.rangerClient;

rangerAuthHivePlugin =
new RangerAuthorizationHadoopSQLPlugin(
Expand All @@ -108,8 +112,7 @@ public static void init(String metalakeName, boolean allowAnyoneAccessHDFS) {
RangerAuthorizationProperties.RANGER_ADMIN_URL,
String.format(
"http://%s:%d",
containerSuite.getRangerContainer().getContainerIpAddress(),
RangerContainer.RANGER_SERVER_PORT),
rangerContainer.getContainerIpAddress(), RangerContainer.RANGER_SERVER_PORT),
RangerAuthorizationProperties.RANGER_AUTH_TYPE,
RangerContainer.authType,
RangerAuthorizationProperties.RANGER_USERNAME,
Expand All @@ -135,7 +138,7 @@ public static void init(String metalakeName, boolean allowAnyoneAccessHDFS) {
RangerAuthorizationProperties.RANGER_ADMIN_URL,
String.format(
"http://%s:%d",
containerSuite.getRangerContainer().getContainerIpAddress(),
rangerContainer.getContainerIpAddress(),
RangerContainer.RANGER_SERVER_PORT),
RangerAuthorizationProperties.RANGER_AUTH_TYPE,
RangerContainer.authType,
Expand Down Expand Up @@ -190,23 +193,16 @@ public static void cleanup() {
}
}

public static void startHiveRangerContainer() {
containerSuite.startHiveRangerContainer(
new HashMap<>(
ImmutableMap.of(
HiveContainer.HIVE_RUNTIME_VERSION,
HiveContainer.HIVE3,
RangerContainer.DOCKER_ENV_RANGER_SERVER_URL,
String.format(
"http://%s:%d",
containerSuite.getRangerContainer().getContainerIpAddress(),
RangerContainer.RANGER_SERVER_PORT),
RangerContainer.DOCKER_ENV_RANGER_HIVE_REPOSITORY_NAME,
RangerITEnv.RANGER_HIVE_REPO_NAME,
RangerContainer.DOCKER_ENV_RANGER_HDFS_REPOSITORY_NAME,
RangerITEnv.RANGER_HDFS_REPO_NAME,
HiveContainer.HADOOP_USER_NAME,
HADOOP_USER_NAME)));
/**
* Starts the Ranger-enabled Hive after {@link #init} has set up the Ranger services, and returns
* it. Goes through the same spec as {@code @HiveFixture(version = HIVE3, auth = RANGER)}, so
* every class shares one Ranger Hive.
*
* @return the running Ranger-enabled Hive
*/
public static HiveContainer startHiveRangerContainer() {
return ContainerSpec.startWithDependencies(
new HiveSpec(HiveVersion.HIVE3, HiveAuth.RANGER), containerSuite);
}

/** Currently we only test Ranger Hive, So wo Allow anyone to visit HDFS */
Expand Down
Loading
Loading