Package test

Source Code of test.ResourceRepoTest

package test;

import java.io.*;
import java.security.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;

import junit.framework.*;
import aQute.bnd.resource.repository.*;
import aQute.bnd.service.RepositoryPlugin.DownloadListener;
import aQute.bnd.service.repository.ResourceRepository.Listener;
import aQute.bnd.service.repository.ResourceRepository.ResourceRepositoryEvent;
import aQute.bnd.service.repository.ResourceRepository.TYPE;
import aQute.bnd.service.repository.*;
import aQute.bnd.service.repository.SearchableRepository.ResourceDescriptor;
import aQute.bnd.version.*;
import aQute.lib.io.*;
import aQute.libg.cryptography.*;

public class ResourceRepoTest extends TestCase {
  ResourceRepositoryImpl  repoImpl  = new ResourceRepositoryImpl();
  File          tmp      = new File("tmp");

  public void setUp() throws Exception {
    IO.delete(tmp);
    tmp.mkdirs();
    repoImpl.setCache(new File(tmp, "cache"));
    repoImpl.setExecutor(Executors.newCachedThreadPool());
    File file = new File(tmp, "index.json");
    file.delete();
    repoImpl.setIndexFile(file);

  }

  public void tearDown() throws Exception {
    IO.delete(tmp);
  }

  public void testRepositoryId() throws Exception {
    // Just basic check
    assertEquals(0, repoImpl.filter(null, null).size());

    SearchableRepository.ResourceDescriptor osgi = create("jar/osgi.jar");
    assertNull(repoImpl.getResource(osgi.id));
   
    // Add it
    boolean add = repoImpl.add("x", osgi);
    assertNotNull(repoImpl.getResource(osgi.id));
    assertEquals(1, repoImpl.filter(null, null).size());
    assertEquals(1, repoImpl.filter("x", null).size());
    assertEquals(0, repoImpl.filter("y", null).size());
   
    repoImpl.delete("y", osgi.id);
    assertEquals(1, repoImpl.filter("x", null).size());
   
    repoImpl.add("y", osgi);
    assertEquals(1, repoImpl.filter("x", null).size());
    assertEquals(1, repoImpl.filter("y", null).size());
    assertEquals(1, repoImpl.filter(null, null).size());
   
    repoImpl.delete("y", osgi.id);
    assertEquals(1, repoImpl.filter("x", null).size());
    assertEquals(0, repoImpl.filter("y", null).size());
    assertEquals(1, repoImpl.filter(null, null).size());
   
    repoImpl.delete("x", osgi.id);
    assertEquals(0, repoImpl.filter("x", null).size());
    assertEquals(0, repoImpl.filter("y", null).size());
    assertEquals(0, repoImpl.filter(null, null).size());

  }

  public void testBasic() throws Exception {
    // Just basic check
    assertEquals(0, repoImpl.filter(null, null).size());

    SearchableRepository.ResourceDescriptor osgi = create("jar/osgi.jar");
    assertNull(repoImpl.getResource(osgi.id));

    // Add it
    repoImpl.add("x", osgi);

    // See if descriptor exists
    SearchableRepository.ResourceDescriptor t = repoImpl.getResourceDescriptor(osgi.id);
    assertNotNull(t);

    File ff = repoImpl.getResource(osgi.id);
    assertTrue(ff.isFile());

    //
    // Should also be in the list
    //
    List< ? extends ResourceDescriptor> list = repoImpl.filter("x", null);
    assertNotNull(list);
    assertEquals(1, list.size());

    //
    // Adding it multiple times
    // is idempotent
    //
    repoImpl.add("x", osgi);
    assertEquals(1, list.size());

    repoImpl.add("y", osgi);
    assertEquals(1, list.size());

    //
    // Check we can delete the cache but this should
    // not delete the index
    //
    repoImpl.deleteCache(t.id);
    list = repoImpl.filter(null, null);
    assertNotNull(list);
    assertEquals(1, list.size());

    //
    // Check download listeners
    //
    final Semaphore s = new Semaphore(0);
    final AtomicBoolean success = new AtomicBoolean(false);

    repoImpl.getResource(t.id, new DownloadListener() {

      @Override
      public void success(File file) throws Exception {
        System.out.println("Success");
        success.set(true);
        s.release();
      }

      @Override
      public void failure(File file, String reason) throws Exception {
        System.out.println("Failure");
        success.set(false);
        s.release();
      }

      @Override
      public boolean progress(File file, int percentage) throws Exception {
        return true;
      }
    });

    s.acquire();
    assertTrue(success.get());

    repoImpl.delete(null,t.id);
    assertEquals(0, repoImpl.filter(null, null).size());

  }

  public void testEvents() throws Exception {
    final AtomicInteger adds = new AtomicInteger();
    final AtomicInteger removes = new AtomicInteger();
    final AtomicInteger starts = new AtomicInteger();
    final AtomicInteger ends = new AtomicInteger();
    final AtomicInteger errors = new AtomicInteger();

    repoImpl.addListener(new Listener() {

      @Override
      public void events(ResourceRepositoryEvent... events) throws Exception {
        for (ResourceRepositoryEvent event : events) {
          switch (event.type) {
            case ADD :
              adds.incrementAndGet();
              break;
            case END_DOWNLOAD :
              ends.incrementAndGet();
              break;
            case ERROR :
              errors.incrementAndGet();
              break;
            case REMOVE :
              removes.incrementAndGet();
              break;
            case START_DOWNLOAD :
              starts.incrementAndGet();
              break;

            default :
              errors.incrementAndGet();
              break;
          }
        }
      }
    });

    ResourceDescriptor rd = create("jar/osgi.jar");
    repoImpl.add("x", rd);
    assertEquals(1, adds.get());
    assertEquals(0, removes.get());
    repoImpl.delete(null,rd.id);
    ;
    assertEquals(1, adds.get());
    assertEquals(1, removes.get());

    repoImpl.add("x", rd);
    File f = repoImpl.getResource(rd.id);
    assertEquals(2, adds.get());
    assertEquals(1, starts.get());
    assertEquals(1, ends.get());
    assertEquals(0, errors.get());
  }

  public void testMultipleDownloads() throws Exception {

    final Semaphore s = new Semaphore(0);
    final AtomicInteger downloads = new AtomicInteger();

    ResourceDescriptor rd = create("jar/osgi.jar");
    repoImpl.add("x", rd);

    final Semaphore done = new Semaphore(0);

    DownloadListener l = new DownloadListener() {

      @Override
      public void success(File file) throws Exception {
        done.release();
      }

      @Override
      public void failure(File file, String reason) throws Exception {
        System.out.println("failure! " + file + " " + reason);
      }

      @Override
      public boolean progress(File file, int percentage) throws Exception {
        return false;
      }
    };

    repoImpl.addListener(new Listener() {

      @Override
      public void events(ResourceRepositoryEvent... events) throws Exception {
        for (ResourceRepositoryEvent event : events) {
          if (event.type == TYPE.START_DOWNLOAD) {
            System.out.println("trying to acquire s");
            s.acquire();
            System.out.println("got it");
            downloads.incrementAndGet();
          }
        }

      }
    });
    File f1 = repoImpl.getResource(rd.id, l);
    File f2 = repoImpl.getResource(rd.id, l);
    assertFalse(f1.isFile());
    assertFalse(f2.isFile());
    assertEquals(0, downloads.get());

    s.release();

    done.acquire(2);
    assertTrue(f1.isFile());
    assertTrue(f2.isFile());
    assertTrue(f1.equals(f2));
    assertEquals(1, downloads.get());
  }

  public void testStore() throws Exception {
    assertEquals(0, repoImpl.filter(null, null).size());
    repoImpl.add("x", create("jar/osgi.jar"));
    assertEquals(1, repoImpl.filter(null, null).size());
    repoImpl = new ResourceRepositoryImpl();
    repoImpl.setCache(new File(tmp, "cache"));
    repoImpl.setExecutor(Executors.newCachedThreadPool());
    repoImpl.setIndexFile(new File(tmp, "index.json"));
    assertEquals(1, repoImpl.filter(null, null).size());
  }

  private SearchableRepository.ResourceDescriptor create(String path) throws NoSuchAlgorithmException, Exception {
    SearchableRepository.ResourceDescriptor rd = new SearchableRepository.ResourceDescriptor();
    File f = IO.getFile(path);
    rd.id = SHA1.digest(f).digest();
    rd.url = f.toURI();
    rd.description = "bla bla";
    rd.bsn = "osgi.core";
    rd.version = new Version("1.0.0");
    return rd;
  }
}
TOP

Related Classes of test.ResourceRepoTest

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.