/* * Copyright (c) 2016, PostgreSQL Global Development Group * See the LICENSE file in the project root for more information. */ package org.postgresql.replication; import org.postgresql.core.ServerVersion; import org.postgresql.test.TestUtil; import org.postgresql.test.jdbc2.CopyBothResponseTest; import org.junit.AssumptionViolatedException; import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.junit.runners.Suite; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; @RunWith(Suite.class) @Suite.SuiteClasses({ CopyBothResponseTest.class, LogicalReplicationTest.class, LogSequenceNumberTest.class, PhysicalReplicationTest.class, LogicalReplicationStatusTest.class, ReplicationConnectionTest.class, ReplicationSlotTest.class}) public class ReplicationTestSuite { @BeforeClass public static void setUp() throws Exception { Connection connection = TestUtil.openDB(); try { if (TestUtil.haveMinimumServerVersion(connection, ServerVersion.v9_0)) { assumeWalSenderEnabled(connection); assumeReplicationRole(connection); } else { throw new AssumptionViolatedException( "Skip replication test because current database version " + "too old and don't contain replication API" ); } } finally { connection.close(); } } private static void assumeWalSenderEnabled(Connection connection) throws SQLException { Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SHOW max_wal_senders"); rs.next(); int maxWalSenders = rs.getInt(1); rs.close(); stmt.close(); if (maxWalSenders == 0) { throw new AssumptionViolatedException( "Skip replication test because max_wal_senders = 0"); } } private static void assumeReplicationRole(Connection connection) throws SQLException { Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT usename, userepl FROM pg_user WHERE usename = current_user"); rs.next(); String userName = rs.getString(1); boolean replicationGrant = rs.getBoolean(2); rs.close(); stmt.close(); if (!replicationGrant) { throw new AssumptionViolatedException( "Skip replication test because user '" + userName + "' doesn't have replication role"); } } }