--perl
use strict;

use File::Basename;
use IO::File;
use lib "lib/";
use My::Find;

#
# Look for Cluster/J library, if not found: skip test.
#

#
# Set up paths
#
my $vardir = $ENV{MYSQLTEST_VARDIR} or die "Need MYSQLTEST_VARDIR";
my $mysql_test_dir = $ENV{MYSQL_TEST_DIR} or die "Need MYSQL_TEST_DIR";
my $basedir = dirname($mysql_test_dir);

# In the RPM case, binaries and libraries are installed in the
# default system locations, instead of having our own private base
# directory. And we install "usr/share/mysql-test". Moving up two
# more directory relative to "mysql-test" gives us a usable base
# directory for RPM installs.
if (! -d "$basedir/sql" and ! -d "$basedir/bin" )
{
  $basedir= dirname($basedir);
}

my $bindir = $ENV{MTR_BINDIR} || $basedir; # Out of source set MTR_BINDIR

#
# Check if the needed jars and libs are available
#

my $clusterj_jar = my_find_file($bindir,
                                [ "storage/ndb/clusterj", 
                                  "share/java",
                                  "share/mysql/java",
                                  "share/mysql-8.0/java",
                                  "lib/java" ],
                                "clusterj-*.jar", NOT_REQUIRED);

my $clusterj_test_jar = my_find_file($bindir,
                                     [ "storage/ndb/clusterj/clusterj-test",
                                       "share/java",
                                       "share/mysql/java",
                                       "share/mysql-8.0/java",
                                       "lib/java" ],
                                     "clusterj-test-*.jar", NOT_REQUIRED);

# The expected installation locations are lib, lib/mysql, lib64/mysql, lib/x86_64-linux-gnu
my $ndbclient_lib = my_find_file($bindir,
                                ["storage/ndb/src/.libs", 
                                 "library_output_directory",
                                 "lib*/*",
                                 "lib"],
                                ["ndbclient.dll", "libndbclient.so", "libndbclient.dylib"],
                                NOT_REQUIRED);

my $F = IO::File->new("$vardir/tmp/have_clusterj_result.inc", 'w') or die;
if ($clusterj_jar) {
  print $F "--let \$CLUSTERJ_JAR= $clusterj_jar\n"; 
  print $F "--echo Found clusterj.jar\n"
} else {
  print $F "--let \$skip_test=1\n";
  print $F "--let \$skip_reason=Could not find clusterj jar file\n";
}

if ($clusterj_test_jar) {
  print $F "--let \$CLUSTERJ_TEST_JAR= $clusterj_test_jar\n";
  print $F "--echo Found clusterj_test jar\n"
} else {
  print $F "--let \$skip_test=1\n";
  print $F "--let \$skip_reason=Could not find clusterj test jar file\n";
}

if ($ndbclient_lib) {
  my $ndbclient_lib_dir = dirname($ndbclient_lib);
  print $F "--let \$NDBCLIENT_LIB_DIR= $ndbclient_lib_dir\n";
  print $F "--echo Found ndbclient library\n"
} else {
  # Test runs only when ndb is compiled and enabled.
  # If not able to find libndbclient, probably an issue with this script.
  print $F "die Did not find libndbclient\n";
}

$F->close();

write_properties();

sub add {
   my $F = shift;
   my $prop = shift;
   my $val = shift;
   print $F "com.mysql.clusterj.$prop=$val\n";
}

sub write_properties {
  my $db = 'test';
  my $user = 'root';
  my $F = IO::File->new("$vardir/tmp/clusterj.properties", 'w') or die;
  add($F, 'connectstring', $ENV{'NDB_CONNECTSTRING'});
  add($F, 'connect.retries', '4');
  add($F, 'connect.delay', '5');
  add($F, 'connect.verbose', '1');
  add($F, 'connect.timeout.before', '30');
  add($F, 'connect.timeout.after', '20');
  add($F, 'jdbc.url', "jdbc:mysql://localhost:$ENV{MASTER_MYPORT}/$db");
  add($F, 'jdbc.driver', 'com.mysql.cj.jdbc.Driver');
  add($F, 'jdbc.username', $user);
  add($F, 'jdbc.password', '');
  add($F, 'username', '');
  add($F, 'password', '');
  add($F, 'database', $db);
  add($F, 'max.transactions', '1024');
  $F->close();
}

EOF

--source $MYSQLTEST_VARDIR/tmp/have_clusterj_result.inc
--remove_file $MYSQLTEST_VARDIR/tmp/have_clusterj_result.inc

# skip if the required jars were not found
if ($skip_test) {
  # remove the clusterj.properties file
  --remove_file $MYSQLTEST_VARDIR/tmp/clusterj.properties
  --skip $skip_reason
}
