From 13417cf9c6eec555b51da49742e47939d2f5715b Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 19 Oct 2012 22:47:33 -0400
Subject: [PATCH] Exclude submodules from zip downloads (issue 151)

---
 tests/com/gitblit/tests/GroovyScriptTest.java |  163 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 159 insertions(+), 4 deletions(-)

diff --git a/tests/com/gitblit/tests/GroovyScriptTest.java b/tests/com/gitblit/tests/GroovyScriptTest.java
index 3158736..3d3621d 100644
--- a/tests/com/gitblit/tests/GroovyScriptTest.java
+++ b/tests/com/gitblit/tests/GroovyScriptTest.java
@@ -20,7 +20,11 @@
 import groovy.lang.Binding;
 import groovy.util.GroovyScriptEngine;
 
+import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -69,15 +73,19 @@
 	public void testSendMail() throws Exception {
 		MockGitblit gitblit = new MockGitblit();
 		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
 		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
 		commands.add(new ReceiveCommand(ObjectId
 				.fromString("c18877690322dfc6ae3e37bb7f7085a24e94e887"), ObjectId
 				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), "refs/heads/master"));
+		commands.add(new ReceiveCommand(ObjectId
+				.fromString("c18877690322dfc6ae3e37bb7f7085a24e94e887"), ObjectId
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), "refs/heads/master2"));
 
 		RepositoryModel repository = GitBlit.self().getRepositoryModel("helloworld.git");
 		repository.mailingLists.add("list@helloworld.git");
 
-		test("sendmail.groovy", gitblit, logger, commands, repository);
+		test("sendmail.groovy", gitblit, logger, clientLogger, commands, repository);
 		assertEquals(1, logger.messages.size());
 		assertEquals(1, gitblit.messages.size());
 		MockMail m = gitblit.messages.get(0);
@@ -86,9 +94,107 @@
 	}
 	
 	@Test
+	public void testProtectRefsCreateBranch() throws Exception {
+		MockGitblit gitblit = new MockGitblit();
+		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
+		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
+		commands.add(new ReceiveCommand(ObjectId.zeroId(), ObjectId
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), "refs/heads/master"));
+		
+		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());		
+
+		test("protect-refs.groovy", gitblit, logger, clientLogger, commands, repository);
+	}
+	
+	@Test
+	public void testProtectRefsCreateTag() throws Exception {
+		MockGitblit gitblit = new MockGitblit();
+		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
+		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
+		commands.add(new ReceiveCommand(ObjectId.zeroId(), ObjectId
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), "refs/tags/v1.0"));
+		
+		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());		
+
+		test("protect-refs.groovy", gitblit, logger, clientLogger, commands, repository);
+		assertEquals(0, logger.messages.size());
+	}
+	
+	@Test
+	public void testProtectRefsFastForward() throws Exception {
+		MockGitblit gitblit = new MockGitblit();
+		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
+		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
+		commands.add(new ReceiveCommand(ObjectId
+				.fromString("c18877690322dfc6ae3e37bb7f7085a24e94e887"), ObjectId
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), "refs/heads/master"));
+		
+		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());		
+
+		test("protect-refs.groovy", gitblit, logger, clientLogger, commands, repository);
+		assertEquals(0, logger.messages.size());
+	}
+	
+	@Test
+	public void testProtectRefsDeleteMasterBranch() throws Exception {
+		MockGitblit gitblit = new MockGitblit();
+		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
+		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
+		ReceiveCommand command = new ReceiveCommand(ObjectId
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), ObjectId.zeroId(),
+				"refs/heads/master");
+		commands.add(command);
+		
+		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());		
+
+		test("protect-refs.groovy", gitblit, logger, clientLogger, commands, repository);
+		assertEquals(ReceiveCommand.Result.REJECTED_NODELETE, command.getResult());
+		assertEquals(0, logger.messages.size());
+	}
+	
+	@Test
+	public void testProtectRefsDeleteOtherBranch() throws Exception {
+		MockGitblit gitblit = new MockGitblit();
+		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
+		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
+		commands.add(new ReceiveCommand(ObjectId
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), ObjectId.zeroId(),
+				"refs/heads/other"));
+		
+		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());		
+
+		test("protect-refs.groovy", gitblit, logger, clientLogger, commands, repository);
+		assertEquals(0, logger.messages.size());
+	}
+	
+	@Test
+	public void testProtectRefsDeleteTag() throws Exception {
+		MockGitblit gitblit = new MockGitblit();
+		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
+		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
+		ReceiveCommand command = new ReceiveCommand(ObjectId
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), ObjectId.zeroId(),
+				"refs/tags/v1.0");
+		commands.add(command);
+		
+		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());		
+
+		test("protect-refs.groovy", gitblit, logger, clientLogger, commands, repository);
+		assertEquals(ReceiveCommand.Result.REJECTED_NODELETE, command.getResult());
+		assertEquals(0, logger.messages.size());
+	}
+	
+	@Test
 	public void testBlockPush() throws Exception {
 		MockGitblit gitblit = new MockGitblit();
 		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
 		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
 		commands.add(new ReceiveCommand(ObjectId
 				.fromString("c18877690322dfc6ae3e37bb7f7085a24e94e887"), ObjectId
@@ -97,14 +203,40 @@
 		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());		
 
 		try {
-			test("blockpush.groovy", gitblit, logger, commands, repository);
+			test("blockpush.groovy", gitblit, logger, clientLogger, commands, repository);
 			assertTrue("blockpush should have failed!", false);
 		} catch (GitBlitException e) {
 			assertTrue(e.getMessage().contains("failed"));
 		}
 	}
+	
+	@Test
+	public void testClientLogging() throws Exception {
+		MockGitblit gitblit = new MockGitblit();
+		MockLogger logger = new MockLogger();
+		MockClientLogger clientLogger = new MockClientLogger();
+		List<ReceiveCommand> commands = new ArrayList<ReceiveCommand>();
+		commands.add(new ReceiveCommand(ObjectId
+				.fromString("c18877690322dfc6ae3e37bb7f7085a24e94e887"), ObjectId
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), "refs/heads/master"));
+		
+		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());
+		
+		File groovyDir = GitBlit.getGroovyScriptsFolder();
+		File tempScript = File.createTempFile("testClientLogging", "groovy", groovyDir);
+		tempScript.deleteOnExit();
+		
+		BufferedWriter writer = new BufferedWriter(new FileWriter(tempScript));
+		
+		writer.write("clientLogger.info('this is a test message')\n");
+		writer.flush();
+		writer.close();
 
-	private void test(String script, MockGitblit gitblit, MockLogger logger,
+		test(tempScript.getName(), gitblit, logger, clientLogger, commands, repository);
+		assertTrue("Message Missing", clientLogger.messages.contains("this is a test message"));
+	}
+
+	private void test(String script, MockGitblit gitblit, MockLogger logger, MockClientLogger clientLogger,
 			List<ReceiveCommand> commands, RepositoryModel repository) throws Exception {
 
 		UserModel user = new UserModel("mock");
@@ -121,6 +253,7 @@
 		binding.setVariable("commands", commands);
 		binding.setVariable("url", gitblitUrl);
 		binding.setVariable("logger", logger);
+		binding.setVariable("clientLogger", clientLogger);
 
 		Object result = gse.run(script, binding);
 		if (result instanceof Boolean) {
@@ -172,6 +305,28 @@
 			messages.add(message);
 		}
 	}
+	
+	class MockClientLogger {
+		List<String> messages = new ArrayList<String>();
+
+		public void info(String message) {
+			messages.add(message);
+		}
+		
+		public void error(String message) {
+			messages.add(message);
+		}
+		
+		public void error(String message, Throwable t) {
+			PrintWriter writer = new PrintWriter(new StringWriter());
+			if (!StringUtils.isEmpty(message)) {
+				writer.append(message);
+				writer.append('\n');
+			}
+			t.printStackTrace(writer);
+			messages.add(writer.toString());
+		}
+	}
 
 	class MockMail {
 		final Collection<String> toAddresses;
@@ -190,4 +345,4 @@
 					+ message;
 		}
 	}
-}
\ No newline at end of file
+}

--
Gitblit v1.9.1