Package repo

Source Code of repo.RepoTest$ArtifactData

package repo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import junit.framework.Assert;

import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Scopes;
import com.tuenti.supernanny.Util;
import com.tuenti.supernanny.dependencies.RepositoryType;
import com.tuenti.supernanny.repo.ArchiveRepo;
import com.tuenti.supernanny.repo.RepoProvider;
import com.tuenti.supernanny.repo.artifacts.ArchiveArtifact;
import com.tuenti.supernanny.repo.artifacts.Artifact;
import com.tuenti.supernanny.repo.artifacts.ReqType;
import com.tuenti.supernanny.repo.artifacts.Requirement;
import com.tuenti.supernanny.repo.exceptions.ResolutionException;
import com.tuenti.supernanny.repo.index.IndexReader;
import com.tuenti.supernanny.resolution.EagerResolver;
import com.tuenti.supernanny.resolution.Resolver;
import com.tuenti.supernanny.util.Version;

public class RepoTest {

  public class ArtifactData {
    public String name;
    public Version version;
    public ArtifactData(String name, String version) {
      this.name = name;
      this.version = new Version(version);
    }
    public ArtifactData(String name, Version version) {
      this.name = name;
      this.version = version;
    }
    @Override
    public int hashCode() {
      final int prime = 31;
      int result = 1;
      result = prime * result + getOuterType().hashCode();
      result = prime * result + ((name == null) ? 0 : name.hashCode());
      result = prime * result + ((version == null) ? 0 : version.hashCode());
      return result;
    }
    @Override
    public boolean equals(Object obj) {
      if (this == obj)
        return true;
      if (obj == null)
        return false;
      if (getClass() != obj.getClass())
        return false;
      ArtifactData other = (ArtifactData) obj;
      if (!getOuterType().equals(other.getOuterType()))
        return false;
      if (name == null) {
        if (other.name != null)
          return false;
      } else if (!name.equals(other.name))
        return false;
      if (version == null) {
        if (other.version != null)
          return false;
      } else if (!version.equals(other.version))
        return false;
      return true;
    }
    private RepoTest getOuterType() {
      return RepoTest.this;
    }
  }

  private static Injector injector;
  private static Util util;

  @BeforeClass
  public static void init() {
    util = Mockito.mock(Util.class);
    injector = Guice.createInjector(new AbstractModule() {
     
      @Override
      protected void configure() {
        bind(RepoProvider.class).in(Scopes.SINGLETON);
        bind(Util.class).toInstance(util);
      }
    });
  }

  public void expectArtifacts(ArtifactData[] expectedArray, Set<Artifact> actual) {
    Set<ArtifactData> adata = new HashSet<ArtifactData>();
    for (Artifact artifact : actual) {
      adata.add(new ArtifactData(artifact.getName(), artifact.getVersion()));
    }
    Set<ArtifactData> expected = new HashSet<ArtifactData>(Arrays.asList(expectedArray));
    Assert.assertEquals(expected, adata);
  }

  @Test
  public void testResolutionOk() throws Exception {
    prepareRepo();

    Resolver resolver = injector.getInstance(EagerResolver.class);
    List<Requirement> initialRequirements = new ArrayList<Requirement>();
    initialRequirements.add(new Requirement("befw", ReqType.EQ, "1.0.0", RepositoryType.TARBZ2,
        "http://localhost"));
    Set<Artifact> artifacts = resolver.resolve(initialRequirements);

    ArtifactData[] expected = { new ArtifactData("tuenti-common", "1.7.0"),
        new ArtifactData("futi", "3.0"), new ArtifactData("tuenti-build", "9.0"),
        new ArtifactData("befw", "1.0.0") };
    expectArtifacts(expected, artifacts);
  }


  @Test
  public void testResolutionLibNotFound() throws Exception {
    prepareRepo();

    Resolver resolver = injector.getInstance(EagerResolver.class);
    List<Requirement> initialRequirements = new ArrayList<Requirement>();
    initialRequirements.add(new Requirement("something-weird", ReqType.EQ, "1.0",
        RepositoryType.TARBZ2, "http://localhost"));
    try {
      resolver.resolve(initialRequirements);
      Assert.fail();
    } catch (ResolutionException e) {
      String msg = e.getMessage();
      Assert.assertTrue(msg.contains("No artifact found") && msg.contains("tuenti-build"));
    }
  }

  @Test
  public void testConflict() throws Exception {
    prepareRepo();

    Resolver resolver = injector.getInstance(EagerResolver.class);
    List<Requirement> initialRequirements = new ArrayList<Requirement>();
    initialRequirements.add(new Requirement("conflicting", ReqType.EQ, "1.0",
        RepositoryType.TARBZ2, "http://localhost"));
    try {
      resolver.resolve(initialRequirements);
      Assert.fail();
    } catch (ResolutionException e) {
      String msg = e.getMessage();
      Assert.assertTrue(msg.contains("tuenti-common") && msg.contains("tuenti-build")
          && msg.contains("9.0") && msg.contains("8.0"));
    }
  }

  @Test
  public void testChooseCorrectMajor() throws Exception {
    prepareRepo();

    Resolver resolver = injector.getInstance(EagerResolver.class);
    List<Requirement> initialRequirements = new ArrayList<Requirement>();
    initialRequirements.add(new Requirement("tuenti-build", ReqType.SW, "8.*",
        RepositoryType.TARBZ2, "http://localhost"));
    Set<Artifact> artifacts = resolver.resolve(initialRequirements);
    expectArtifacts(new ArtifactData[] { new ArtifactData("tuenti-build", "8.0") }, artifacts);
  }

  @Test
  public void testCircular() throws Exception {
    prepareRepo();

    Resolver resolver = injector.getInstance(EagerResolver.class);
    List<Requirement> initialRequirements = new ArrayList<Requirement>();
    initialRequirements.add(new Requirement("flik", ReqType.SW, "1.*",
        RepositoryType.TARBZ2, "http://localhost"));
    Set<Artifact> artifacts = resolver.resolve(initialRequirements);
    expectArtifacts(new ArtifactData[] { new ArtifactData("flik", "1.0"), new ArtifactData("flak", "1.0"), new ArtifactData("flok", "1.0") }, artifacts);
  }
 
  private void prepareRepo() throws FileNotFoundException, IOException {
    ArchiveRepo repo = new ArchiveRepo("http://localhost", false, 10) {
      @Override
      public RepositoryType getRepoType() {
        return RepositoryType.TARBZ2;
      }
    };
    BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(
        "testData/index2.txt")));
    IndexReader ir = new IndexReader(bufferedReader);
    List<ArchiveArtifact> artifacts = ir.parse();
    repo.setArtifacts(artifacts);
    RepoProvider provider = injector.getInstance(RepoProvider.class);
    provider.addRepo(RepositoryType.TARBZ2, "http://localhost", repo);
  }
}
TOP

Related Classes of repo.RepoTest$ArtifactData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.