Matthias Andreas Benkard | b5d657a | 2022-02-03 21:14:30 +0100 | [diff] [blame] | 1 | // SPDX-FileCopyrightText: © 2021 Matthias Andreas Benkard <code@mail.matthias.benkard.de> |
| 2 | // |
| 3 | // SPDX-License-Identifier: LGPL-3.0-or-later |
| 4 | |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 5 | package eu.mulk.jgvariant.ostree; |
| 6 | |
| 7 | import static org.junit.jupiter.api.Assertions.assertAll; |
| 8 | import static org.junit.jupiter.api.Assertions.assertEquals; |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 9 | |
| 10 | import com.adelean.inject.resources.junit.jupiter.GivenBinaryResource; |
| 11 | import com.adelean.inject.resources.junit.jupiter.TestWithResources; |
| 12 | import eu.mulk.jgvariant.core.Signature; |
| 13 | import eu.mulk.jgvariant.core.Variant; |
| 14 | import java.nio.ByteBuffer; |
Matthias Andreas Benkard | f66fc18 | 2023-12-10 11:37:30 +0100 | [diff] [blame^] | 15 | import java.util.Arrays; |
| 16 | import java.util.HexFormat; |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 17 | import java.util.List; |
Matthias Andreas Benkard | 329168c | 2021-12-28 01:20:05 +0100 | [diff] [blame] | 18 | import java.util.Map; |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 19 | import org.junit.jupiter.api.Test; |
| 20 | |
| 21 | @TestWithResources |
Matthias Andreas Benkard | 91dbd74 | 2022-10-17 19:38:56 +0200 | [diff] [blame] | 22 | @SuppressWarnings({ |
| 23 | "ImmutableListOf1", |
| 24 | "ImmutableMapOf1", |
| 25 | "initialization.field.uninitialized", |
| 26 | "NullAway" |
| 27 | }) |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 28 | class 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 Benkard | 91dbd74 | 2022-10-17 19:38:56 +0200 | [diff] [blame] | 52 | void summaryDecoder() { |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 53 | var decoder = Summary.decoder(); |
| 54 | var summary = decoder.decode(ByteBuffer.wrap(summaryBytes)); |
Matthias Andreas Benkard | f66fc18 | 2023-12-10 11:37:30 +0100 | [diff] [blame^] | 55 | |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 56 | 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 Benkard | 329168c | 2021-12-28 01:20:05 +0100 | [diff] [blame] | 67 | Map.of( |
| 68 | "ostree.commit.timestamp", |
| 69 | new Variant(Signature.parse("t"), 1640537170L)))))), |
Matthias Andreas Benkard | f66fc18 | 2023-12-10 11:37:30 +0100 | [diff] [blame^] | 70 | 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 Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 103 | System.out.println(summary); |
| 104 | } |
| 105 | |
| 106 | @Test |
Matthias Andreas Benkard | 91dbd74 | 2022-10-17 19:38:56 +0200 | [diff] [blame] | 107 | void commitDecoder() { |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 108 | var decoder = Commit.decoder(); |
| 109 | var commit = decoder.decode(ByteBuffer.wrap(commitBytes)); |
| 110 | System.out.println(commit); |
| 111 | } |
| 112 | |
| 113 | @Test |
Matthias Andreas Benkard | 91dbd74 | 2022-10-17 19:38:56 +0200 | [diff] [blame] | 114 | void dirTreeDecoder() { |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 115 | var decoder = DirTree.decoder(); |
| 116 | var dirTree = decoder.decode(ByteBuffer.wrap(dirTreeBytes)); |
| 117 | System.out.println(dirTree); |
| 118 | } |
| 119 | |
| 120 | @Test |
Matthias Andreas Benkard | 91dbd74 | 2022-10-17 19:38:56 +0200 | [diff] [blame] | 121 | void dirMetaDecoder() { |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 122 | var decoder = DirMeta.decoder(); |
| 123 | var dirMeta = decoder.decode(ByteBuffer.wrap(dirMetaBytes)); |
| 124 | System.out.println(dirMeta); |
| 125 | } |
| 126 | |
| 127 | @Test |
Matthias Andreas Benkard | 91dbd74 | 2022-10-17 19:38:56 +0200 | [diff] [blame] | 128 | void superblockDecoder() { |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 129 | var decoder = DeltaSuperblock.decoder(); |
| 130 | var deltaSuperblock = decoder.decode(ByteBuffer.wrap(deltaSuperblockBytes)); |
| 131 | System.out.println(deltaSuperblock); |
| 132 | } |
| 133 | |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 134 | @Test |
Matthias Andreas Benkard | 91dbd74 | 2022-10-17 19:38:56 +0200 | [diff] [blame] | 135 | void partPayloadDecoder() { |
Matthias Andreas Benkard | c981cde | 2021-12-30 20:37:39 +0100 | [diff] [blame] | 136 | var superblockDecoder = DeltaSuperblock.decoder(); |
| 137 | var superblock = superblockDecoder.decode(ByteBuffer.wrap(deltaSuperblockBytes)); |
| 138 | |
| 139 | var decoder = DeltaPartPayload.decoder(superblock.entries().get(0)); |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 140 | var deltaPartPayload = decoder.decode(ByteBuffer.wrap(deltaPartPayloadBytes)); |
Matthias Andreas Benkard | c981cde | 2021-12-30 20:37:39 +0100 | [diff] [blame] | 141 | |
Matthias Andreas Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 142 | System.out.println(deltaPartPayload); |
| 143 | } |
Matthias Andreas Benkard | f66fc18 | 2023-12-10 11:37:30 +0100 | [diff] [blame^] | 144 | |
| 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 Benkard | 4e8423d | 2021-12-19 22:56:09 +0100 | [diff] [blame] | 151 | } |