From 27ae9095639bb228a1b7ff86a3ebe4264abf05be Mon Sep 17 00:00:00 2001
From: mschaefers <mschaefers@scoop-gmbh.de>
Date: Thu, 29 Nov 2012 12:33:09 -0500
Subject: [PATCH] feature: when using LdapUserService one can configure Gitblit to fetch all users from ldap that can possibly login. This allows to see newly generated LDAP users instantly in Gitblit. By now an LDAP user had to log in once to appear in GitBlit.

---
 tests/com/gitblit/tests/GroovyScriptTest.java |  218 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 211 insertions(+), 7 deletions(-)

diff --git a/tests/com/gitblit/tests/GroovyScriptTest.java b/tests/com/gitblit/tests/GroovyScriptTest.java
index 308160d..47d20a4 100644
--- a/tests/com/gitblit/tests/GroovyScriptTest.java
+++ b/tests/com/gitblit/tests/GroovyScriptTest.java
@@ -20,11 +20,16 @@
 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;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -65,28 +70,201 @@
 	}
 
 	@Test
-	public void testSendMail() throws Exception {
+	public void testSendHtmlMail() 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"));
 
-		test("sendmail.groovy", gitblit, logger, commands);
+		RepositoryModel repository = GitBlit.self().getRepositoryModel("helloworld.git");
+		repository.mailingLists.add("list@helloworld.git");
+
+		test("sendmail-html.groovy", gitblit, logger, clientLogger, commands, repository);
+		assertEquals(1, logger.messages.size());
+		assertEquals(1, gitblit.messages.size());
+		MockMail m = gitblit.messages.get(0);
+		assertEquals(5, m.toAddresses.size());
+		assertTrue(m.message.contains("BIT"));
+		assertTrue(m.message.contains("<html>"));
+	}
+
+	@Test
+	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, clientLogger, commands, repository);
 		assertEquals(1, logger.messages.size());
 		assertEquals(1, gitblit.messages.size());
 		MockMail m = gitblit.messages.get(0);
 		assertEquals(5, m.toAddresses.size());
 		assertTrue(m.message.contains("BIT"));
 	}
+	
+	@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());		
 
-	private void test(String script, MockGitblit gitblit, MockLogger logger,
-			List<ReceiveCommand> commands) throws Exception {
+		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
+				.fromString("3fa7c46d11b11d61f1cbadc6888be5d0eae21969"), "refs/heads/master"));
+		
+		RepositoryModel repository = new RepositoryModel("ex@mple.git", "", "admin", new Date());		
+
+		try {
+			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();
+
+		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");
-		RepositoryModel repository = GitBlit.self().getRepositoryModel("helloworld.git");
-		repository.mailingLists.add("list@helloworld.git");
 
 		String gitblitUrl = GitBlitSuite.url;
 
@@ -100,6 +278,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) {
@@ -142,6 +321,9 @@
 		public void sendMail(String subject, String message, Collection<String> toAddresses) {
 			messages.add(new MockMail(subject, message, toAddresses));
 		}
+		public void sendHtmlMail(String subject, String message, Collection<String> toAddresses) {
+			messages.add(new MockMail(subject, message, toAddresses));
+		}
 	}
 
 	class MockLogger {
@@ -149,6 +331,28 @@
 
 		public void info(String message) {
 			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());
 		}
 	}
 
@@ -169,4 +373,4 @@
 					+ message;
 		}
 	}
-}
\ No newline at end of file
+}

--
Gitblit v1.9.1