From f66e89662c091e082bd1d2feb6ac91513ccff273 Mon Sep 17 00:00:00 2001
From: Rafael Cavazin <rafaelcavazin@gmail.com>
Date: Sun, 21 Jul 2013 09:59:00 -0400
Subject: [PATCH] Merge branch 'master' of https://github.com/gitblit/gitblit

---
 src/test/java/com/gitblit/tests/LuceneExecutorTest.java |  172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 172 insertions(+), 0 deletions(-)

diff --git a/src/test/java/com/gitblit/tests/LuceneExecutorTest.java b/src/test/java/com/gitblit/tests/LuceneExecutorTest.java
new file mode 100644
index 0000000..0b67f5d
--- /dev/null
+++ b/src/test/java/com/gitblit/tests/LuceneExecutorTest.java
@@ -0,0 +1,172 @@
+/*
+ * 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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jgit.lib.Repository;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.gitblit.LuceneExecutor;
+import com.gitblit.models.RefModel;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.models.SearchResult;
+import com.gitblit.tests.mock.MemorySettings;
+import com.gitblit.utils.FileUtils;
+import com.gitblit.utils.JGitUtils;
+
+/**
+ * Tests Lucene indexing and querying.
+ * 
+ * @author James Moger
+ * 
+ */
+public class LuceneExecutorTest {
+
+	LuceneExecutor lucene;
+	
+	private LuceneExecutor newLuceneExecutor() {
+		Map<String, Object> map = new HashMap<String, Object>();
+		MemorySettings settings = new MemorySettings(map);		
+		return new LuceneExecutor(settings, GitBlitSuite.REPOSITORIES);
+	}
+	
+	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() throws Exception {
+		// 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"));
+	}
+}
\ No newline at end of file

--
Gitblit v1.9.1