Package com.gitblit.tests

Source Code of com.gitblit.tests.LuceneExecutorTest

/*
* Copyright 2012 gitblit.com.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gitblit.tests;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jgit.lib.Repository;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.gitblit.Keys;
import com.gitblit.manager.RepositoryManager;
import com.gitblit.manager.RuntimeManager;
import com.gitblit.manager.UserManager;
import com.gitblit.models.RefModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.SearchResult;
import com.gitblit.service.LuceneService;
import com.gitblit.tests.mock.MemorySettings;
import com.gitblit.utils.FileUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.XssFilter;
import com.gitblit.utils.XssFilter.AllowXssFilter;

/**
* Tests Lucene indexing and querying.
*
* @author James Moger
*
*/
public class LuceneExecutorTest extends GitblitUnitTest {

  LuceneService lucene;

  private LuceneService newLuceneExecutor() {
    MemorySettings settings = new MemorySettings();
    settings.put(Keys.git.repositoriesFolder, GitBlitSuite.REPOSITORIES);
    XssFilter xssFilter = new AllowXssFilter();
    RuntimeManager runtime = new RuntimeManager(settings, xssFilter, GitBlitSuite.BASEFOLDER).start();
    UserManager users = new UserManager(runtime, null).start();
    RepositoryManager repos = new RepositoryManager(runtime, null, users);
    return new LuceneService(settings, repos);
  }

  private RepositoryModel newRepositoryModel(Repository repository) {
    RepositoryModel model = new RepositoryModel();
    model.name = FileUtils.getRelativePath(GitBlitSuite.REPOSITORIES, repository.getDirectory());
    model.hasCommits = JGitUtils.hasCommits(repository);

    // index all local branches
    model.indexedBranches = new ArrayList<String>();
    for (RefModel ref : JGitUtils.getLocalBranches(repository, true, -1)) {
      model.indexedBranches.add(ref.getName());
    }
    return model;
  }

  @Before
  public void setup() {
    lucene = newLuceneExecutor();
  }

  @After
  public void tearDown() {
    lucene.close();
  }

  @Test
  public void testIndex() {
    // reindex helloworld
    Repository repository = GitBlitSuite.getHelloworldRepository();
    RepositoryModel model = newRepositoryModel(repository);
    lucene.reindex(model, repository);
    repository.close();

    SearchResult result = lucene.search("type:blob AND path:bit.bit", 1, 1, model.name).get(0);
    assertEquals("Mike Donaghy", result.author);
    result = lucene.search("type:blob AND path:clipper.prg", 1, 1, model.name).get(0);
    assertEquals("tinogomes", result.author);

    // reindex JGit
    repository = GitBlitSuite.getJGitRepository();
    model = newRepositoryModel(repository);
    lucene.reindex(model, repository);
    repository.close();
  }

  @Test
  public void testQuery() throws Exception {
    // 2 occurrences on the master branch
    Repository repository = GitBlitSuite.getHelloworldRepository();
    RepositoryModel model = newRepositoryModel(repository);
    repository.close();

    List<SearchResult> results = lucene.search("ada", 1, 10, model.name);
    assertEquals(2, results.size());
    for (SearchResult res : results) {
      assertEquals("refs/heads/master", res.branch);
    }

    // author test
    results = lucene.search("author: tinogomes AND type:commit", 1, 10, model.name);
    assertEquals(2, results.size());

    // blob test
    results = lucene.search("type: blob AND \"import std.stdio\"", 1, 10, model.name);
    assertEquals(1, results.size());
    assertEquals("d.D", results.get(0).path);

    // commit test
    repository = GitBlitSuite.getJGitRepository();
    model = newRepositoryModel(repository);
    repository.close();

    results = lucene.search("\"initial jgit contribution to eclipse.org\"", 1, 10, model.name);
    assertEquals(1, results.size());
    assertEquals("Git Development Community", results.get(0).author);
    assertEquals("1a6964c8274c50f0253db75f010d78ef0e739343", results.get(0).commitId);
    assertEquals("refs/heads/master", results.get(0).branch);

    // hash id tests
    results = lucene.search("type:commit AND commit:1a6964c8274c50f0253db75f010d78ef0e739343", 1, 10, model.name);
    assertEquals(1, results.size());

    results = lucene.search("type:commit AND commit:1a6964c8274*", 1, 10, model.name);
    assertEquals("Shawn O. Pearce", results.get(0).committer);
    assertEquals(1, results.size());

    // annotated tag test
    results = lucene.search("I663208919f297836a9c16bf458e4a43ffaca4c12", 1, 10, model.name);
    assertEquals(1, results.size());
    assertEquals("[v1.3.0.201202151440-r]", results.get(0).tags.toString());
  }

  @Test
  public void testMultiSearch() throws Exception {
    List<String> list = new ArrayList<String>();
    Repository repository = GitBlitSuite.getHelloworldRepository();
    list.add(newRepositoryModel(repository).name);
    repository.close();

    repository = GitBlitSuite.getJGitRepository();
    list.add(newRepositoryModel(repository).name);
    repository.close();

    List<SearchResult> results = lucene.search("test", 1, 10, list);
    assertEquals(10, results.size());
  }

  @Test
  public void testDeleteBlobFromIndex() throws Exception {
    // start with a fresh reindex of entire repository
    Repository repository = GitBlitSuite.getHelloworldRepository();
    RepositoryModel model = newRepositoryModel(repository);
    lucene.reindex(model, repository);

    // now delete a blob
    assertTrue(lucene.deleteBlob(model.name, "refs/heads/master", "java.java"));
    assertFalse(lucene.deleteBlob(model.name, "refs/heads/master", "java.java"));
  }
}
TOP

Related Classes of com.gitblit.tests.LuceneExecutorTest

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.