blob: 75c5ea486771a23c7e874cb94fd1ef412f381755 [file] [log] [blame]
Matthias Andreas Benkardb5d657a2022-02-03 21:14:30 +01001// SPDX-FileCopyrightText: © 2021 Matthias Andreas Benkard <code@mail.matthias.benkard.de>
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +01005package eu.mulk.jgvariant.ostree;
6
7import static org.junit.jupiter.api.Assertions.assertAll;
8import static org.junit.jupiter.api.Assertions.assertEquals;
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +01009
10import com.adelean.inject.resources.junit.jupiter.GivenBinaryResource;
11import com.adelean.inject.resources.junit.jupiter.TestWithResources;
12import eu.mulk.jgvariant.core.Signature;
13import eu.mulk.jgvariant.core.Variant;
14import java.nio.ByteBuffer;
Matthias Andreas Benkardf66fc182023-12-10 11:37:30 +010015import java.util.Arrays;
16import java.util.HexFormat;
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010017import java.util.List;
Matthias Andreas Benkard329168c2021-12-28 01:20:05 +010018import java.util.Map;
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010019import org.junit.jupiter.api.Test;
20
21@TestWithResources
Matthias Andreas Benkard91dbd742022-10-17 19:38:56 +020022@SuppressWarnings({
23 "ImmutableListOf1",
24 "ImmutableMapOf1",
25 "initialization.field.uninitialized",
26 "NullAway"
27})
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010028class OstreeDecoderTest {
29
30 @GivenBinaryResource("/ostree/summary")
31 byte[] summaryBytes;
32
33 @GivenBinaryResource(
34 "/ostree/objects/3d/3b3329dca38871f29aeda1bf5854d76c707fa269759a899d0985c91815fe6f.commit")
35 byte[] commitBytes;
36
37 @GivenBinaryResource(
38 "/ostree/objects/14/c9b958ac59df4979095a3485b4da5a045fe8737ffdba8cfbfff24988b238f7.dirtree")
39 byte[] dirTreeBytes;
40
41 @GivenBinaryResource(
42 "/ostree/objects/48/cc6a2ecdab284b9d1e5b0e875c905866ff32f65ee1e857df0e691285d6f14c.dirmeta")
43 byte[] dirMetaBytes;
44
45 @GivenBinaryResource("/ostree/deltas/Mc/iDXVydLGaHpQCRyFFC0bLYU_9Bap+4G07jB1RRDVI/superblock")
46 byte[] deltaSuperblockBytes;
47
48 @GivenBinaryResource("/ostree/deltas/Mc/iDXVydLGaHpQCRyFFC0bLYU_9Bap+4G07jB1RRDVI/0")
49 byte[] deltaPartPayloadBytes;
50
51 @Test
Matthias Andreas Benkard91dbd742022-10-17 19:38:56 +020052 void summaryDecoder() {
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010053 var decoder = Summary.decoder();
54 var summary = decoder.decode(ByteBuffer.wrap(summaryBytes));
Matthias Andreas Benkardf66fc182023-12-10 11:37:30 +010055
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +010056 assertAll(
57 () ->
58 assertEquals(
59 List.of(
60 new Summary.Entry(
61 "mulkos/1.x/amd64",
62 new Summary.Entry.Value(
63 214,
64 Checksum.ofHex(
65 "66ff167ff35ce87daac817447a9490a262ee75f095f017716a6eb1a9d9eb3350"),
66 new Metadata(
Matthias Andreas Benkard329168c2021-12-28 01:20:05 +010067 Map.of(
68 "ostree.commit.timestamp",
69 new Variant(Signature.parse("t"), 1640537170L)))))),
Matthias Andreas Benkardf66fc182023-12-10 11:37:30 +010070 summary.entries()),
71 () ->
72 assertEquals(
73 Map.of(
74 "ostree.summary.last-modified",
75 new Variant(Signature.parse("t"), 1640537300L),
76 "ostree.summary.tombstone-commits",
77 new Variant(Signature.parse("b"), false),
78 "ostree.static-deltas",
79 new Variant(
80 Signature.parse("a{sv}"),
81 Map.of(
82 "3d3b3329dca38871f29aeda1bf5854d76c707fa269759a899d0985c91815fe6f-66ff167ff35ce87daac817447a9490a262ee75f095f017716a6eb1a9d9eb3350",
83 new Variant(
84 Signature.parse("ay"),
85 bytesOfHex(
86 "03738040e28e7662e9c9d2599c530ea974e642c9f87e6c00cbaa39a0cdac8d44")),
87 "31c8835d5c9d2c6687a50091c85142d1b2d853ff416a9fb81b4ee30754510d52",
88 new Variant(
89 Signature.parse("ay"),
90 bytesOfHex(
91 "f481144629474bd88c106e45ac405ebd75b324b0655af1aec14b31786ae1fd61")),
92 "31c8835d5c9d2c6687a50091c85142d1b2d853ff416a9fb81b4ee30754510d52-3d3b3329dca38871f29aeda1bf5854d76c707fa269759a899d0985c91815fe6f",
93 new Variant(
94 Signature.parse("ay"),
95 bytesOfHex(
96 "2c6a07bc1cf4d7ce7d00f82d7d2d6d156fd0e31d476851b46dc2306b181b064a")))),
97 "ostree.summary.mode",
98 new Variant(Signature.parse("s"), "bare"),
99 "ostree.summary.indexed-deltas",
100 new Variant(Signature.parse("b"), true)),
101 summary.metadata().fields()));
102
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100103 System.out.println(summary);
104 }
105
106 @Test
Matthias Andreas Benkard91dbd742022-10-17 19:38:56 +0200107 void commitDecoder() {
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100108 var decoder = Commit.decoder();
109 var commit = decoder.decode(ByteBuffer.wrap(commitBytes));
110 System.out.println(commit);
111 }
112
113 @Test
Matthias Andreas Benkard91dbd742022-10-17 19:38:56 +0200114 void dirTreeDecoder() {
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100115 var decoder = DirTree.decoder();
116 var dirTree = decoder.decode(ByteBuffer.wrap(dirTreeBytes));
117 System.out.println(dirTree);
118 }
119
120 @Test
Matthias Andreas Benkard91dbd742022-10-17 19:38:56 +0200121 void dirMetaDecoder() {
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100122 var decoder = DirMeta.decoder();
123 var dirMeta = decoder.decode(ByteBuffer.wrap(dirMetaBytes));
124 System.out.println(dirMeta);
125 }
126
127 @Test
Matthias Andreas Benkard91dbd742022-10-17 19:38:56 +0200128 void superblockDecoder() {
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100129 var decoder = DeltaSuperblock.decoder();
130 var deltaSuperblock = decoder.decode(ByteBuffer.wrap(deltaSuperblockBytes));
131 System.out.println(deltaSuperblock);
132 }
133
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100134 @Test
Matthias Andreas Benkard91dbd742022-10-17 19:38:56 +0200135 void partPayloadDecoder() {
Matthias Andreas Benkardc981cde2021-12-30 20:37:39 +0100136 var superblockDecoder = DeltaSuperblock.decoder();
137 var superblock = superblockDecoder.decode(ByteBuffer.wrap(deltaSuperblockBytes));
138
139 var decoder = DeltaPartPayload.decoder(superblock.entries().get(0));
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100140 var deltaPartPayload = decoder.decode(ByteBuffer.wrap(deltaPartPayloadBytes));
Matthias Andreas Benkardc981cde2021-12-30 20:37:39 +0100141
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100142 System.out.println(deltaPartPayload);
143 }
Matthias Andreas Benkardf66fc182023-12-10 11:37:30 +0100144
145 private static List<Byte> bytesOfHex(String hex) {
146 var bytes = HexFormat.of().parseHex(hex);
147 var byteObjects = new Byte[bytes.length];
148 Arrays.setAll(byteObjects, i -> bytes[i]);
149 return Arrays.asList(byteObjects);
150 }
Matthias Andreas Benkard4e8423d2021-12-19 22:56:09 +0100151}