package aQute.maven.provider;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.List;
import java.util.Properties;
import aQute.bnd.http.HttpClient;
import aQute.bnd.version.MavenVersion;
import aQute.http.testservers.HttpTestServer.Config;
import aQute.lib.io.IO;
import aQute.libg.reporter.ReporterAdapter;
import aQute.maven.api.Archive;
import aQute.maven.api.Program;
import aQute.maven.api.Release;
import aQute.maven.api.Revision;
import junit.framework.TestCase;
public class MavenRepoTest extends TestCase {
File aFile = IO.getFile("testresources/empty");
String tmpName;
File local;
File remote;
FakeNexus fnx;
List<MavenBackingRepository> repo;
MavenRepository storage;
ReporterAdapter reporter = new ReporterAdapter(System.err);
@Override
protected void setUp() throws Exception {
super.setUp();
tmpName = "generated/tmp/test/" + getName();
local = IO.getFile(tmpName + "/local");
remote = IO.getFile(tmpName + "/remote");
reporter.setTrace(true);
Config config = new Config();
fnx = new FakeNexus(config, remote);
fnx.start();
IO.delete(remote);
IO.delete(local);
IO.copy(IO.getFile("testresources/mavenrepo"), remote);
remote.mkdirs();
local.mkdirs();
repo = MavenBackingRepository.create(fnx.getBaseURI() + "/repo/", reporter, local, new HttpClient());
storage = new MavenRepository(local, "fnexus", this.repo, this.repo, null, null,
null);
}
@Override
protected void tearDown() throws Exception {
fnx.close();
super.tearDown();
}
public void testBasic() throws Exception {
Program program = Program.valueOf("commons-cli", "commons-cli");
List<Revision> revisions = storage.getRevisions(program);
assertNotNull(revisions);
assertEquals(3, revisions.size());
Revision revision = program.version(new MavenVersion("1.4-SNAPSHOT"));
assertTrue(revisions.contains(revision));
List<Archive> snapshotArchives = storage.getSnapshotArchives(revision);
assertNotNull(snapshotArchives);
assertEquals(10, snapshotArchives.size());
Archive archive = storage.getResolvedArchive(revision, "pom", null);
assertNotNull(archive);
assertEquals("1.4-20160119.062305-9", archive.snapshot.toString());
File file = storage.get(archive).getValue();
assertNotNull(file);
assertEquals(10373L, file.length());
}
public void testSnapshotCaches() throws Exception {
File fpom = IO.getFile(local, "commons-cli/commons-cli/1.4-SNAPSHOT/commons-cli-1.4-SNAPSHOT.pom");
Program program = Program.valueOf("commons-cli", "commons-cli");
Revision revision = Program.valueOf("commons-cli", "commons-cli").version("1.4-SNAPSHOT");
Archive apom = revision.archive("pom", null);
assertFalse(fpom.exists());
assertFalse(apom.isResolved());
File f = storage.get(apom).getValue();
assertEquals(fpom.getAbsolutePath(), f.getAbsolutePath());
assertRecent(f);
long flastModified = f.lastModified();
Thread.sleep(1001);
f = storage.get(apom).getValue();
assertEquals(flastModified, f.lastModified());
f.setLastModified(0);
assertFalse(Math.abs(System.currentTimeMillis() - f.lastModified()) <= 2000);
f = storage.get(apom).getValue();
assertFalse(f.lastModified() != 0);
}
void assertRecent(File f) {
assertTrue(Math.abs(System.currentTimeMillis() - f.lastModified()) <= 20000);
}
public void testImmutable() throws Exception {
File fpom = IO.getFile(local, "commons-cli/commons-cli/1.2/commons-cli-1.2.pom");
Program program = Program.valueOf("commons-cli", "commons-cli");
Revision revision = Program.valueOf("commons-cli", "commons-cli").version("1.2");
Archive apom = revision.archive("pom", null);
assertFalse(fpom.exists());
Archive rapom = storage.resolveSnapshot(apom);
assertTrue(rapom.isResolved());
assertEquals(rapom, apom);
File f = storage.get(rapom).getValue();
assertEquals(fpom, f);
assertRecent(f);
f.setLastModified(10000);
f = storage.get(rapom).getValue();
assertEquals(fpom, f);
assertEquals(10000L, f.lastModified());
}
public void testBasicSnapshotRelease() throws Exception {
File fpom = IO.getFile(local, "commons-cli/commons-cli/1.4-SNAPSHOT/commons-cli-1.4-SNAPSHOT.pom");
File rpom = IO.getFile(remote, "commons-cli/commons-cli/1.4-SNAPSHOT/commons-cli-1.4-19700101.000010-10.pom");
Program program = Program.valueOf("commons-cli", "commons-cli");
Revision revision = Program.valueOf("commons-cli", "commons-cli").version("1.4-SNAPSHOT");
Archive apom = revision.archive("pom", null);
assertFalse(fpom.exists());
Release r = storage.release(revision, new Properties());
r.setBuild(10000, null);
r.add("pom", null, new ByteArrayInputStream(new byte[0]));
r.close();
assertTrue(fpom.isFile());
assertTrue(rpom.isFile());
}
}