summaryrefslogtreecommitdiff
path: root/tests/test-refs-collections.sh
blob: 8bdc50d7652b563ab66dd48e87aa8c02fe82e90a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/bin/bash
#
# Copyright © 2016 Red Hat, Inc.
# Copyright © 2017 Endless Mobile, Inc.
#
# SPDX-License-Identifier: LGPL-2.0+
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <https://www.gnu.org/licenses/>.

set -euo pipefail

. $(dirname $0)/libtest.sh

echo '1..2'

cd ${test_tmpdir}
mkdir repo
ostree_repo_init repo --collection-id org.example.Collection

mkdir -p tree/root
touch tree/root/a

# Add a few commits
seq 5 | while read i; do
    echo a >> tree/root/a
    ${CMD_PREFIX} ostree --repo=repo commit --branch=test-$i -m test -s test tree
done

# The collection IDs should only be listed if --collections is passed.
${CMD_PREFIX} ostree --repo=repo refs | wc -l > refscount
assert_file_has_content refscount "^5$"

${CMD_PREFIX} ostree --repo=repo refs > refs
assert_file_has_content refs "^test\-1$"
assert_file_has_content refs "^test\-5$"
assert_not_file_has_content refs "org\.example\.Collection"

${CMD_PREFIX} ostree --repo=repo refs --collections > refs
assert_file_has_content refs "^(org\.example\.Collection, test-1)$"
assert_file_has_content refs "^(org\.example\.Collection, test-5)$"

# Similarly, the collection IDs should only be listed when filtering if --collections is passed.
${CMD_PREFIX} ostree --repo=repo refs --list org.example.Collection | wc -l > refscount
assert_file_has_content refscount "^0$"

${CMD_PREFIX} ostree --repo=repo refs --collections --list org.example.Collection | wc -l > refscount
assert_file_has_content refscount "^5$"

# --delete by itself should fail.
${CMD_PREFIX} ostree --repo=repo refs --delete 2>/dev/null || true
${CMD_PREFIX} ostree --repo=repo refs | wc -l > refscount.delete1
assert_file_has_content refscount.delete1 "^5$"

# Deleting specific refs should work.
${CMD_PREFIX} ostree refs --delete 2>/dev/null && (echo 1>&2 "refs --delete (without prefix) unexpectedly succeeded!"; exit 1)
${CMD_PREFIX} ostree --repo=repo refs --delete test-1 test-2
${CMD_PREFIX} ostree --repo=repo refs | wc -l > refscount.delete2
assert_file_has_content refscount.delete2 "^3$"
${CMD_PREFIX} ostree --repo=repo refs > refs.delete2
assert_not_file_has_content refs.delete2 '^test-1$'
assert_not_file_has_content refs.delete2 '^test-2$'
assert_file_has_content refs.delete2 '^test-3$'

# Deleting by collection ID should only work if --collections is passed.
${CMD_PREFIX} ostree refs --repo=repo --delete org.example.Collection
${CMD_PREFIX} ostree refs --repo=repo | wc -l > refscount.delete3
assert_file_has_content refscount.delete3 "^3$"

${CMD_PREFIX} ostree refs --repo=repo --collections --delete org.example.Collection
${CMD_PREFIX} ostree refs --repo=repo | wc -l > refscount.delete4
assert_file_has_content refscount.delete4 "^0$"

# Add a few more commits, to test --create
${CMD_PREFIX} ostree --repo=repo commit --branch=ctest -m ctest -s ctest tree

${CMD_PREFIX} ostree --repo=repo refs | wc -l > refscount
assert_file_has_content refscount "^1$"

# and test mirrored branches
${CMD_PREFIX} ostree --repo=repo refs --collections --create=org.example.NewCollection:ctest-mirror ctest

${CMD_PREFIX} ostree --repo=repo refs | wc -l > refscount
assert_file_has_content refscount "^1$"
${CMD_PREFIX} ostree --repo=repo refs --collections | wc -l > refscount
assert_file_has_content refscount "^2$"

${CMD_PREFIX} ostree --repo=repo refs > refs
assert_file_has_content refs "^ctest$"
assert_not_file_has_content refs "^ctest-mirror$"

${CMD_PREFIX} ostree --repo=repo refs --collections > refs
assert_file_has_content refs "^(org\.example\.Collection, ctest)$"
assert_file_has_content refs "^(org\.example\.NewCollection, ctest-mirror)$"

# Remote refs should be listed if they have collection IDs

cd ${test_tmpdir}
mkdir collection-repo
ostree_repo_init collection-repo --collection-id org.example.RemoteCollection
mkdir -p adir
${CMD_PREFIX} ostree --repo=collection-repo commit --branch=rcommit -m rcommit -s rcommit adir
${CMD_PREFIX} ostree --repo=repo remote add --no-sign-verify --collection-id org.example.RemoteCollection collection-repo-remote "file://${test_tmpdir}/collection-repo"
${CMD_PREFIX} ostree --repo=repo pull collection-repo-remote rcommit

${CMD_PREFIX} ostree --repo=repo refs --collections > refs
assert_file_has_content refs "^(org\.example\.RemoteCollection, rcommit)$"

${CMD_PREFIX} ostree --repo=repo refs --collections org.example.RemoteCollection > refs
assert_file_has_content refs "^(org\.example\.RemoteCollection, rcommit)$"

${CMD_PREFIX} ostree --repo=repo refs --collections org.example.NonexistentID > refs
assert_not_file_has_content refs "^(org\.example\.RemoteCollection, rcommit)$"

cd ${test_tmpdir}
mkdir no-collection-repo
ostree_repo_init no-collection-repo
mkdir -p adir2
${CMD_PREFIX} ostree --repo=no-collection-repo commit --branch=rcommit2 -m rcommit2 -s rcommit2 adir2
${CMD_PREFIX} ostree --repo=repo remote add --no-sign-verify no-collection-repo-remote "file://${test_tmpdir}/no-collection-repo"
${CMD_PREFIX} ostree --repo=repo pull no-collection-repo-remote rcommit2
${CMD_PREFIX} ostree --repo=repo refs --collections > refs
assert_not_file_has_content refs "rcommit2"

echo "ok 1 refs collections"

# Test that listing, creating and deleting refs works from an old repository
# where refs/mirrors doesn’t exist to begin with.
rm -rf repo/refs/mirrors
${CMD_PREFIX} ostree --repo=repo refs

rm -rf repo/refs/mirrors
${CMD_PREFIX} ostree --repo=repo refs --collections

rm -rf repo/refs/mirrors
${CMD_PREFIX} ostree --repo=repo refs --collections --create=org.example.NewCollection:ctest-mirror ctest
${CMD_PREFIX} ostree --repo=repo refs --collections > refs
assert_file_has_content refs "^(org\.example\.Collection, ctest)$"
assert_file_has_content refs "^(org\.example\.NewCollection, ctest-mirror)$"

rm -rf repo/refs/mirrors
${CMD_PREFIX} ostree refs --repo=repo --collections --delete org.example.NonexistentCollection

echo "ok 2 refs collections in old repository"