/ tests / frontend / create-parsebin.sh
create-parsebin.sh
  1  #! /usr/bin/env atf-sh
  2  
  3  . $(atf_get_srcdir)/test_environment.sh
  4  
  5  tests_init \
  6  	create_from_bin
  7  
  8  genmanifest() {
  9      local PKG_NAME="$1"
 10      shift
 11      local PKG_FLATSIZE=0
 12      local PKG_FILES=""
 13      local PKG_SHA256=""
 14      local NL="
 15  "
 16      local hide_provided="$1"
 17      shift
 18  
 19      bin_meta "$1"
 20      while [ -n "$1" ]; do
 21          local file1="${1%#*}"
 22          local file1_base=$(basename ${file1})
 23          local file1_size=$(wc -c < ${file1})
 24          local file1_sha=$(openssl dgst -sha256 -hex ${file1} | sed -nE 's/.*=[[:space:]]*([[:xdigit:]]+)/\1/p')
 25          cp -a ${file1} ${TMPDIR}/${file1_base}
 26  	file1_mtime=$(q_mtime ${TMPDIR}/${file1_base})
 27  
 28          PKG_FILES="${PKG_FILES}/${file1_base}: {perm: 0644}${NL}"
 29  	PKG_SHA256="${PKG_SHA256}
 30      /${file1_base} {
 31          sum = \"1\$${file1_sha}\";
 32          uname = \"root\";
 33          gname = \"wheel\";
 34          perm = \"0644\";
 35          fflags = 0;
 36          mtime = ${file1_mtime};
 37      }"
 38  
 39          PKG_FLATSIZE=$((${PKG_FLATSIZE}+${file1_size}))
 40          shift
 41      done
 42  
 43  	cat << EOF > ${PKG_NAME}.manifest
 44  name: ${PKG_NAME}
 45  origin: ${PKG_NAME}
 46  version: 1
 47  maintainer: test
 48  categories: [test]
 49  comment: a test
 50  www: http://test
 51  prefix: /
 52  desc: <<EOD
 53  Yet another test
 54  EOD
 55  files: {
 56      ${PKG_FILES}
 57  }
 58  EOF
 59  
 60  	cat << EOF > ${PKG_NAME}.expected
 61  name = "${PKG_NAME}";
 62  origin = "${PKG_NAME}";
 63  version = "1";
 64  comment = "a test";
 65  maintainer = "test";
 66  www = "http://test";
 67  abi = "${XABI}";
 68  arch = "${XALTABI}";
 69  prefix = "/";
 70  flatsize = ${PKG_FLATSIZE};
 71  desc = "Yet another test";
 72  categories [
 73      "test",
 74  ]
 75  EOF
 76      if [ -n "${Xshlibs_required}" ]; then
 77          echo "shlibs_required [" >> ${PKG_NAME}.expected
 78          for i in ${Xshlibs_required}; do
 79              echo ${NL}"    "\"$i\", >> ${PKG_NAME}.expected
 80          done
 81          echo "]" >> ${PKG_NAME}.expected
 82      fi
 83      if [ -n "${Xshlibs_provided}" ]; then
 84          if [ -n "${hide_provided}" ]; then
 85              echo "shlibs_provided_ignore [" >> ${PKG_NAME}.expected
 86          else
 87              echo "shlibs_provided [" >> ${PKG_NAME}.expected
 88          fi
 89          for i in ${Xshlibs_provided}; do
 90              echo ${NL}"    "\"$i\", >> ${PKG_NAME}.expected
 91          done
 92          echo "]" >> ${PKG_NAME}.expected
 93      fi
 94  
 95      if [ -n "${XFreeBSD_version}" ]; then
 96      	cat << EOF >> ${PKG_NAME}.expected
 97  annotations {
 98      FreeBSD_version = "${XFreeBSD_version}";
 99  }
100  EOF
101      fi
102  
103  	cat << EOF >> ${PKG_NAME}.expected
104  files {${PKG_SHA256}
105  }
106  EOF
107  }
108  
109  do_check() {
110      local PKG_NAME=$1
111      local file1=$(atf_get_srcdir)/$2
112      local hide_provided=$3
113  
114      genmanifest ${PKG_NAME} "${hide_provided}" ${file1}
115  
116      # cat ${PKG_NAME}.manifest
117      atf_check \
118          -o empty \
119          -e empty \
120          -s exit:0 \
121          pkg -o IGNORE_OSMAJOR=1 -o ABI_FILE=${file1} $hide_provided \
122          create -M ./${PKG_NAME}.manifest -r ${TMPDIR}
123  
124      # cat ${PKG_NAME}.expected
125      atf_check \
126          -o file:${PKG_NAME}.expected \
127          -e empty \
128          -s exit:0 \
129          pkg info -R --raw-format=ucl -F ${PKG_NAME}-1.pkg
130  }
131  
132  create_from_bin_body() {
133      for bin in \
134          freebsd-aarch64.bin freebsd-amd64.bin freebsd-armv6.bin freebsd-armv7.bin \
135  		freebsd-i386.bin freebsd-powerpc.bin freebsd-powerpc64.bin freebsd-powerpc64le.bin \
136  		freebsd-riscv64.bin dfly.bin linux.bin \
137          macos.bin macos106.bin macos150.bin \
138          macosfat.bin "macosfat.bin#x86_64" "macosfat.bin#aarch64" \
139          macosfatlib.bin "macosfatlib.bin#x86_64" "macosfatlib.bin#aarch64"
140      do
141          do_check testbin $bin
142          do_check testbin $bin "-o SHLIB_PROVIDE_PATHS_NATIVE=/does/not/exist"
143          do_check testbin $bin "-o SHLIB_PROVIDE_IGNORE_GLOB=*"
144      done
145  }