1 #! /bin/sh
   2 
   3 # Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
   4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 #
   6 # This code is free software; you can redistribute it and/or modify it
   7 # under the terms of the GNU General Public License version 2 only, as
   8 # published by the Free Software Foundation.
   9 #
  10 # This code is distributed in the hope that it will be useful, but WITHOUT
  11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13 # version 2 for more details (a copy is included in the LICENSE file that
  14 # accompanied this code).
  15 #
  16 # You should have received a copy of the GNU General Public License version
  17 # 2 along with this work; if not, write to the Free Software Foundation,
  18 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19 #
  20 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21 # or visit www.oracle.com if you need additional information or have any
  22 # questions.
  23 
  24 # @test
  25 # @summary Basic test of repo on file system, and resolver filtering on OS/ARCH
  26 # @run shell hello-repo.sh
  27 
  28 set -e
  29 
  30 BIN=${TESTJAVA:-../../../../build}/bin
  31 SRC=${TESTSRC:-.}
  32 VMOPTS="${TESTVMOPTS} -esa -ea"
  33 
  34 mk() {
  35   d=`dirname $1`
  36   if [ ! -d $d ]; then mkdir -p $d; fi
  37   cat - >$1
  38 }
  39 
  40 compare() {
  41   if [ "$1" != "$2" ]; then
  42     echo "FAIL: expected [$1], got [$2]"
  43     exit 1
  44   fi
  45 }
  46 
  47 rm -rf z.*
  48 
  49 mk z.src/app/module-info.java <<EOF
  50 module app @ 1.0 {
  51     requires foolib;
  52     class com.app.Main;
  53 }
  54 EOF
  55 
  56 mk z.src/app/com/app/Main.java <<EOF
  57 package com.app;
  58 import java.lang.reflect.Module;
  59 public class Main {
  60     public static void main(String[] args) {
  61         System.out.println("Hello, " + com.foolib.Lib.text());
  62     }
  63 }
  64 EOF
  65 
  66 mk z.src/foolib1/module-info.java <<EOF
  67 module foolib @ 1.0 {
  68     exports com.foolib;
  69 }
  70 EOF
  71 
  72 mk z.src/foolib1/com/foolib/Lib.java <<EOF
  73 package com.foolib;
  74 public class Lib {
  75     public static String text() {
  76         return "foolib @ 1";
  77     }
  78 }
  79 EOF
  80 
  81 mk z.src/foolib2/module-info.java <<EOF
  82 module foolib @ 2.0 {
  83     exports com.foolib;
  84 }
  85 EOF
  86 
  87 mk z.src/foolib2/com/foolib/Lib.java <<EOF
  88 package com.foolib;
  89 public class Lib {
  90     public static String text() {
  91         return "foolib @ 2";
  92     }
  93 }
  94 EOF
  95 
  96 ## Two versions of foolib in the repo, ensure resolver picks the correct version
  97 
  98 mkdir z.mods
  99 $BIN/javac -source 8 -d z.mods -modulepath z.modules \
 100     `find z.src/app z.src/foolib1 -name '*.java'`
 101 mkdir z.mods/foolib2
 102 $BIN/javac -source 8 -d z.mods/foolib2 `find z.src/foolib2 -name '*.java'`
 103 
 104 mkdir z.pkgs
 105 $BIN/jpkg ${TESTTOOLVMOPTS} -d z.pkgs -m z.mods/app jmod app
 106 $BIN/jpkg ${TESTTOOLVMOPTS} -d z.pkgs -m z.mods/foolib1 jmod foolib
 107 $BIN/jpkg ${TESTTOOLVMOPTS} -d z.pkgs -m z.mods/foolib2 jmod foolib
 108 
 109 $BIN/jrepo ${TESTTOOLVMOPTS} z.repo create
 110 $BIN/jrepo ${TESTTOOLVMOPTS} z.repo add z.pkgs/*.jmod
 111 
 112 $BIN/jmod ${TESTTOOLVMOPTS} create -L z.mlib
 113 $BIN/jmod ${TESTTOOLVMOPTS} add-repo -L z.mlib z.repo
 114 $BIN/jmod ${TESTTOOLVMOPTS} -L z.mlib install -n app
 115 $BIN/jmod ${TESTTOOLVMOPTS} -L z.mlib install app
 116 OUT=`$BIN/java ${VMOPTS} -L z.mlib -m app | tr -d ' \n\r'`
 117 compare Hello,foolib@2 $OUT
 118 
 119 ## create OS/ARCH specific library and jmods
 120 mkdir z.arch_pkgs
 121 rm -rf z.mlib z.repo
 122 $BIN/jpkg ${TESTTOOLVMOPTS} -d z.arch_pkgs -os Bos -arch Barch -m z.mods/app jmod app
 123 $BIN/jpkg ${TESTTOOLVMOPTS} -d z.arch_pkgs -os Bos -arch Barch -m z.mods/foolib1 jmod foolib
 124 $BIN/jpkg ${TESTTOOLVMOPTS} -d z.arch_pkgs -os Cos -arch Carch -m z.mods/foolib2 jmod foolib
 125 
 126 $BIN/jrepo ${TESTTOOLVMOPTS} z.repo create
 127 $BIN/jrepo ${TESTTOOLVMOPTS} z.repo add z.arch_pkgs/*.jmod
 128 
 129 $BIN/jmod ${TESTTOOLVMOPTS} create -L z.mlib -os Bos -arch Barch
 130 $BIN/jmod ${TESTTOOLVMOPTS} add-repo -L z.mlib z.repo
 131 $BIN/jmod ${TESTTOOLVMOPTS} -L z.mlib install -n app
 132 $BIN/jmod ${TESTTOOLVMOPTS} -L z.mlib install app
 133 OUT=`$BIN/java ${VMOPTS} -L z.mlib -m app | tr -d ' \n\r'`
 134 compare Hello,foolib@1 $OUT
 135