blob: cad80ef7071adb5daa4ae2518907e61d96777e7d [file] [log] [blame]
/*
* Copyright (C) 2023, Google LLC. and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.transport;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.util.zip.Deflater;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.util.NB;
import org.eclipse.jgit.util.TemporaryBuffer;
import org.eclipse.jgit.util.TemporaryBuffer.Heap;
/**
* Helper class to create packs for tests.
*/
public class InMemoryPack {
private final Heap tinyPack;
public InMemoryPack() {
this(1024);
}
public InMemoryPack(int size) {
this.tinyPack = new TemporaryBuffer.Heap(size);
}
public InMemoryPack header(int cnt)
throws IOException {
final byte[] hdr = new byte[8];
NB.encodeInt32(hdr, 0, 2);
NB.encodeInt32(hdr, 4, cnt);
tinyPack.write(Constants.PACK_SIGNATURE);
tinyPack.write(hdr, 0, 8);
return this;
}
public InMemoryPack write(int i) throws IOException {
tinyPack.write(i);
return this;
}
public InMemoryPack deflate(byte[] content)
throws IOException {
Deflater deflater = new Deflater();
byte[] buf = new byte[128];
deflater.setInput(content, 0, content.length);
deflater.finish();
do {
final int n = deflater.deflate(buf, 0, buf.length);
if (n > 0)
tinyPack.write(buf, 0, n);
} while (!deflater.finished());
return this;
}
public InMemoryPack copyRaw(AnyObjectId o) throws IOException {
o.copyRawTo(tinyPack);
return this;
}
public InMemoryPack digest() throws IOException {
MessageDigest md = Constants.newMessageDigest();
md.update(tinyPack.toByteArray());
tinyPack.write(md.digest());
return this;
}
public InputStream toInputStream() throws IOException {
return new ByteArrayInputStream(tinyPack.toByteArray());
}
public byte[] toByteArray() throws IOException {
return tinyPack.toByteArray();
}
}