/ tests / frontend / issue1440.sh
issue1440.sh
  1  #! /usr/bin/env atf-sh
  2  
  3  . $(atf_get_srcdir)/test_environment.sh
  4  
  5  
  6  # https://github.com/freebsd/pkg/issues/1440
  7  #pkgA
  8  # - pkgB
  9  #    - pkgC
 10  #      - pkgD
 11  #1. Two repos (repoA and repoB) with same set of packages. pkgA for repoA and repoB have different options set.
 12  #   repoB has prio 100, so all packages must be prefered from this one.
 13  #2. On upgrade pkg wants to reinstall pkgA due options changed from repoA which is wrong.
 14  
 15  tests_init \
 16          issue1440
 17  
 18  issue1440_body() {
 19  
 20          touch pkgA.file
 21          touch pkgB.file
 22          touch pkgC.file
 23          touch pkgD.file
 24  
 25          cat << EOF > pkgA.ucl
 26  name: pkgA
 27  origin: misc/pkgA
 28  version: "1.0"
 29  maintainer: test
 30  categories: [test]
 31  comment: a test
 32  www: http://test
 33  prefix: /usr/local
 34  desc: <<EOD
 35  Yet another test
 36  EOD
 37  options: {
 38      APNG: "on",
 39      PNGTEST: "on"
 40  }
 41  deps:   {
 42            pkgB: {
 43                  origin: "misc/pkgB",
 44                  version: "1.0"
 45                }
 46          }
 47  files: {
 48      ${TMPDIR}/pkgA.file: "",
 49  }
 50  EOF
 51  
 52          cat << EOF > pkgB.ucl
 53  name: pkgB
 54  origin: misc/pkgB
 55  version: "1.0"
 56  maintainer: test
 57  categories: [test]
 58  comment: a test
 59  www: http://test
 60  prefix: /usr/local
 61  desc: <<EOD
 62  Yet another test
 63  EOD
 64  deps:   {
 65            pkgC: {
 66                  origin: "misc/pkgC",
 67                  version: "1.0"
 68                }
 69          }
 70  
 71  files: {
 72      ${TMPDIR}/pkgB.file: "",
 73  }
 74  EOF
 75  
 76          cat << EOF > pkgC.ucl
 77  name: pkgC
 78  origin: misc/pkgC
 79  version: "1.0"
 80  maintainer: test
 81  categories: [test]
 82  comment: a test
 83  www: http://test
 84  prefix: /usr/local
 85  desc: <<EOD
 86  Yet another test
 87  EOD
 88  deps:   {
 89            pkgD: {
 90                  origin: "misc/pkgD",
 91                  version: "1.0"
 92                }
 93          }
 94  files: {
 95      ${TMPDIR}/pkgC.file: "",
 96  }
 97  EOF
 98  
 99  
100          cat << EOF > pkgD.ucl
101  name: pkgD
102  origin: misc/pkgD
103  version: "1.0"
104  maintainer: test
105  categories: [test]
106  comment: a test
107  www: http://test
108  prefix: /usr/local
109  desc: <<EOD
110  Yet another test
111  EOD
112  files: {
113      ${TMPDIR}/pkgD.file: "",
114  }
115  EOF
116  
117  	mkdir reposconf
118          cat << EOF > reposconf/repos.conf
119  repoA: {
120          url: file://${TMPDIR}/repoA,
121          enabled: true
122  }
123  repoB: {
124          url: file://${TMPDIR}/repoB,
125  	priority: 100,
126          enabled: true
127  }
128  
129  EOF
130  
131          for p in pkgA pkgB pkgC pkgD; do
132                  atf_check \
133                          -o ignore \
134                          -e empty \
135                          -s exit:0 \
136                          pkg create -o ${TMPDIR}/repoA -M ./${p}.ucl
137          done
138  
139          atf_check \
140                  -o inline:"Creating repository in ${TMPDIR}/repoA:  done\nPacking files for repository:  done\n" \
141                  -e empty \
142                  -s exit:0 \
143                  pkg repo -o ${TMPDIR}/repoA ${TMPDIR}/repoA
144  
145          cat << EOF > pkgA.ucl
146  name: pkgA
147  origin: misc/pkgA
148  version: "1.0"
149  maintainer: test
150  categories: [test]
151  comment: a test
152  www: http://test
153  prefix: /usr/local
154  desc: <<EOD
155  Yet another test
156  EOD
157  options: {
158      APNG: "off",
159      PNGTEST: "on"
160  }
161  deps:   {
162            pkgB: {
163                  origin: "misc/pkgB",
164                  version: "1.0"
165                }
166          }
167  files: {
168      ${TMPDIR}/pkgA.file: "",
169  }
170  EOF
171  
172          for p in pkgA pkgB pkgC pkgD; do
173                  atf_check \
174                          -o ignore \
175                          -e empty \
176                          -s exit:0 \
177                          pkg create -o ${TMPDIR}/repoB -M ./${p}.ucl
178          done
179  
180  
181          atf_check \
182                  -o inline:"Creating repository in ${TMPDIR}/repoB:  done\nPacking files for repository:  done\n" \
183                  -e empty \
184                  -s exit:0 \
185                  pkg repo -o ${TMPDIR}/repoB ${TMPDIR}/repoB
186  
187  
188  
189  OUTPUT_CASE1="Updating repoA repository catalogue...
190  ${JAILED}Fetching meta.conf:  done
191  ${JAILED}Fetching data:  done
192  Processing entries:  done
193  repoA repository update completed. 4 packages processed.
194  Updating repoB repository catalogue...
195  ${JAILED}Fetching meta.conf:  done
196  ${JAILED}Fetching data:  done
197  Processing entries:  done
198  repoB repository update completed. 4 packages processed.
199  All repositories are up to date.
200  Checking integrity... done (0 conflicting)
201  The following 4 package(s) will be affected (of 0 checked):
202  
203  New packages to be INSTALLED:
204  	pkgA: 1.0 [repoB]
205  	pkgB: 1.0 [repoB]
206  	pkgC: 1.0 [repoB]
207  	pkgD: 1.0 [repoB]
208  
209  Number of packages to be installed: 4
210  ${JAILED}[1/4] Installing pkgD-1.0...
211  ${JAILED}[1/4] Extracting pkgD-1.0:  done
212  ${JAILED}[2/4] Installing pkgC-1.0...
213  ${JAILED}[2/4] Extracting pkgC-1.0:  done
214  ${JAILED}[3/4] Installing pkgB-1.0...
215  ${JAILED}[3/4] Extracting pkgB-1.0:  done
216  ${JAILED}[4/4] Installing pkgA-1.0...
217  ${JAILED}[4/4] Extracting pkgA-1.0:  done
218  "
219  
220          atf_check \
221                  -o inline:"${OUTPUT_CASE1}" \
222                  -s exit:0 \
223                  pkg -o REPOS_DIR="${TMPDIR}/reposconf" -o PKG_CACHEDIR="${TMPDIR}" install -y pkgA
224  
225  
226  
227  OUTPUT_CASE2="Updating repoA repository catalogue...
228  repoA repository is up to date.
229  Updating repoB repository catalogue...
230  repoB repository is up to date.
231  All repositories are up to date.
232  Checking for upgrades (1 candidates):  done
233  Processing candidates (1 candidates):  done
234  Checking integrity... done (0 conflicting)
235  Your packages are up to date.
236  "
237          atf_check \
238                  -o inline:"${OUTPUT_CASE2}" \
239                  -e empty \
240                  -s exit:0 \
241                  pkg -o REPOS_DIR="${TMPDIR}/reposconf" -o PKG_CACHEDIR="${TMPDIR}" upgrade -y
242  
243  }