James Moger
2011-05-28 28d6b2a860740557bf93dd0f9a48d059379ed696
Unit testing. Removal of some unused code paths.
2 files added
13 files modified
266 ■■■■ changed files
src/com/gitblit/FileSettings.java 17 ●●●●● patch | view | raw | blame | history
src/com/gitblit/GitBlitServer.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/GitBlitServlet.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/MakeCertificate.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/models/PathModel.java 10 ●●●●● patch | view | raw | blame | history
src/com/gitblit/models/RepositoryModel.java 6 ●●●● patch | view | raw | blame | history
src/com/gitblit/models/TicketModel.java 5 ●●●●● patch | view | raw | blame | history
src/com/gitblit/models/UserModel.java 7 ●●●● patch | view | raw | blame | history
src/com/gitblit/utils/TimeUtils.java 28 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/EditUserPage.java 5 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/TreePage.java 9 ●●●● patch | view | raw | blame | history
tests/com/gitblit/tests/GitBlitSuite.java 11 ●●●●● patch | view | raw | blame | history
tests/com/gitblit/tests/GitBlitTest.java 36 ●●●●● patch | view | raw | blame | history
tests/com/gitblit/tests/JGitUtilsTest.java 66 ●●●●● patch | view | raw | blame | history
tests/com/gitblit/tests/TimeUtilsTest.java 60 ●●●●● patch | view | raw | blame | history
src/com/gitblit/FileSettings.java
@@ -34,10 +34,16 @@
    private final Logger logger = LoggerFactory.getLogger(FileSettings.class);
    private final File propertiesFile;
    private Properties properties = new Properties();
    private long lastread;
    public FileSettings(String file) {
        this.propertiesFile = new File(file);
    }
    @Override
    public List<String> getAllKeys(String startingWith) {
        startingWith = startingWith.toLowerCase();
@@ -138,15 +144,14 @@
        return strings;
    }
    private synchronized Properties read() {
        File file = new File(Constants.PROPERTIES_FILE);
        if (file.exists() && (file.lastModified() > lastread)) {
    private synchronized Properties read() {
        if (propertiesFile.exists() && (propertiesFile.lastModified() > lastread)) {
            FileInputStream is = null;
            try {
                properties = new Properties();
                is = new FileInputStream(Constants.PROPERTIES_FILE);
                is = new FileInputStream(propertiesFile);
                properties.load(is);
                lastread = file.lastModified();
                lastread = propertiesFile.lastModified();
            } catch (FileNotFoundException f) {
                // IGNORE - won't happen because file.exists() check above
            } catch (Throwable t) {
@@ -166,6 +171,6 @@
    @Override
    public String toString() {
        return new File(Constants.PROPERTIES_FILE).getAbsolutePath();
        return propertiesFile.getAbsolutePath();
    }
}
src/com/gitblit/GitBlitServer.java
@@ -425,7 +425,7 @@
    @Parameters(separators = " ")
    private static class Params {
        
        private static final FileSettings FILESETTINGS = new FileSettings();
        private static final FileSettings FILESETTINGS = new FileSettings(Constants.PROPERTIES_FILE);
        /*
         * Server parameters
src/com/gitblit/GitBlitServlet.java
@@ -56,7 +56,7 @@
        }
        int forwardSlash = url.indexOf('/');
        if (forwardSlash > -1) {
            String repository = url.substring(0, forwardSlash);
            String repository = url.substring(0, forwardSlash).toLowerCase();
            String function = url.substring(forwardSlash + 1);
            String query = req.getQueryString() == null ? "" : req.getQueryString();
            RepositoryModel model = GitBlit.self().getRepositoryModel(repository);
src/com/gitblit/MakeCertificate.java
@@ -156,7 +156,7 @@
    @Parameters(separators = " ")
    private static class Params {
        private static final FileSettings FILESETTINGS = new FileSettings();
        private static final FileSettings FILESETTINGS = new FileSettings(Constants.PROPERTIES_FILE);
        
        @Parameter(names = { "--alias" }, description = "Server alias", required = true)
        public String alias;
src/com/gitblit/models/PathModel.java
@@ -43,16 +43,6 @@
        return FileMode.TREE.equals(mode);
    }
    public static PathModel getParentPath(String basePath, String commitId) {
        String parentPath = null;
        if (basePath.lastIndexOf('/') > -1) {
            parentPath = basePath.substring(0, basePath.lastIndexOf('/'));
        }
        PathModel model = new PathModel("..", parentPath, 0, 40000, commitId);
        model.isParentPath = true;
        return model;
    }
    @Override
    public int hashCode() {
        return commitId.hashCode() + path.hashCode();
src/com/gitblit/models/RepositoryModel.java
@@ -37,11 +37,7 @@
    public boolean isFrozen;
    public RepositoryModel() {
        this.name = "";
        this.description = "";
        this.owner = "";
        this.lastChange = new Date(0);
        this.accessRestriction = AccessRestrictionType.NONE;
        this("", "", "", new Date(0));
    }
    public RepositoryModel(String name, String description, String owner, Date lastchange) {
src/com/gitblit/models/TicketModel.java
@@ -58,11 +58,6 @@
        public String author;
        public Date date;
        public Comment(String text, Date date) {
            this.text = text;
            this.date = date;
        }
        public Comment(String filename, String content) throws ParseException {
            String[] chunks = filename.split("_", -1);
            this.date = new Date(Long.parseLong(chunks[1]) * 1000L);
src/com/gitblit/models/UserModel.java
@@ -34,12 +34,7 @@
    }
    public boolean canAccessRepository(String repositoryName) {
        return canAdmin || repositories.contains(repositoryName);
    }
    public void setRepositories(List<String> repositories) {
        this.repositories.clear();
        this.repositories.addAll(repositories);
        return canAdmin || repositories.contains(repositoryName.toLowerCase());
    }
    public void addRepository(String name) {
src/com/gitblit/utils/TimeUtils.java
@@ -45,9 +45,9 @@
    public static String duration(int days) {
        if (days <= 60) {
            return days + (days > 1 ? " days" : " day");
        } else if (days <= 365) {
        } else if (days < 365) {
            int rem = days % 30;
            return (days / 30) + " months, " + rem + (rem > 1 ? " days" : " day");
            return (days / 30) + (rem >= 15 ? 1 : 0) + " months";
        } else {
            int years = days / 365;
            int rem = days % 365;
@@ -56,23 +56,17 @@
                if (rem == 0) {
                    return yearsString;
                } else {
                    return yearsString + ", " + rem + (rem > 1 ? " days" : " day");
                    return yearsString + (rem >= 15 ? ", 1 month" : "");
                }
            } else {
                int months = rem / 30;
                int remDays = rem % 30;
                String monthsString;
                if (months == 0) {
                    monthsString = yearsString;
                } else {
                    monthsString = yearsString + ", " + months
                            + (months > 1 ? " months" : " month");
                if (remDays >= 15) {
                    months++;
                }
                if (remDays == 0) {
                    return monthsString;
                } else {
                    return monthsString + ", " + remDays + (remDays > 1 ? " days" : " day");
                }
                String monthsString = yearsString + ", " + months
                        + (months > 1 ? " months" : " month");
                return monthsString;
            }
        }
    }
@@ -120,7 +114,7 @@
        String ago = null;
        if (isToday(date) || isYesterday(date)) {
            int mins = minutesAgo(date, true);
            if (mins > 120) {
            if (mins >= 120) {
                if (css) {
                    return "age1";
                }
@@ -128,7 +122,7 @@
                if (hours > 23) {
                    ago = "yesterday";
                } else {
                    ago = hours + " hour" + (hours > 1 ? "s" : "") + " ago";
                    ago = hours + " hours ago";
                }
            } else {
                if (css) {
@@ -158,8 +152,6 @@
                        months++;
                    }
                    ago = months + " month" + (months > 1 ? "s" : "") + " ago";
                } else {
                    ago = days + " day" + (days > 1 ? "s" : "") + " ago";
                }
            } else if (days == 365) {
                ago = "1 year ago";
src/com/gitblit/wicket/pages/EditUserPage.java
@@ -140,9 +140,10 @@
                Iterator<String> selectedRepositories = repositories.getSelectedChoices();
                List<String> repos = new ArrayList<String>();
                while (selectedRepositories.hasNext()) {
                    repos.add(selectedRepositories.next());
                    repos.add(selectedRepositories.next().toLowerCase());
                }
                userModel.setRepositories(repos);
                userModel.repositories.clear();
                userModel.repositories.addAll(repos);
                try {
                    GitBlit.self().editUserModel(oldName, userModel, isCreate);
                } catch (GitBlitException e) {
src/com/gitblit/wicket/pages/TreePage.java
@@ -65,7 +65,14 @@
        // breadcrumbs
        add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, path, objectId));
        if (path != null && path.trim().length() > 0) {
            paths.add(0, PathModel.getParentPath(path, objectId));
            // add .. parent path entry
            String parentPath = null;
            if (path.lastIndexOf('/') > -1) {
                parentPath = path.substring(0, path.lastIndexOf('/'));
            }
            PathModel model = new PathModel("..", parentPath, 0, 40000, objectId);
            model.isParentPath = true;
            paths.add(0, model);
        }
        final ByteFormat byteFormat = new ByteFormat();
tests/com/gitblit/tests/GitBlitSuite.java
@@ -11,6 +11,10 @@
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepository;
import com.gitblit.FileSettings;
import com.gitblit.GitBlit;
import com.gitblit.JettyLoginService;
public class GitBlitSuite extends TestSetup {
    public static final File REPOSITORIES = new File("git");
@@ -20,7 +24,9 @@
    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTestSuite(TimeUtilsTest.class);
        suite.addTestSuite(JGitUtilsTest.class);
        suite.addTestSuite(GitBlitTest.class);
        return new GitBlitSuite(suite);
    }
@@ -39,6 +45,11 @@
            cloneOrFetch("nested/helloworld.git", "https://github.com/git/hello-world.git", true);
            cloneOrFetch("ticgit.git", "https://github.com/jeffWelling/ticgit.git", true);
        }
        FileSettings settings = new FileSettings("distrib/gitblit.properties");
        GitBlit.self().configureContext(settings);
        JettyLoginService loginService = new JettyLoginService(new File("distrib/users.properties"));
        loginService.loadUsers();
        GitBlit.self().setLoginService(loginService);
    }
    private void cloneOrFetch(String toFolder, String fromUrl, boolean bare) throws Exception {
tests/com/gitblit/tests/GitBlitTest.java
New file
@@ -0,0 +1,36 @@
package com.gitblit.tests;
import java.util.List;
import junit.framework.TestCase;
import com.gitblit.GitBlit;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
public class GitBlitTest extends TestCase {
    public void testRepositoryModel() throws Exception {
        List<String> repositories = GitBlit.self().getRepositoryList();
        assertTrue("Repository list is empty!", repositories.size() > 0);
        assertTrue("Missing Helloworld repository!", repositories.contains(GitBlitSuite.getHelloworldRepository().getDirectory().getName()));
        RepositoryModel model = GitBlit.self().getRepositoryModel(GitBlitSuite.getHelloworldRepository().getDirectory().getName());
        assertTrue("Helloworld model is null!", model != null);
        assertTrue(model.toString().equals(GitBlitSuite.getHelloworldRepository().getDirectory().getName()));
    }
    public void testUserModel() throws Exception {
        List<String> users = GitBlit.self().getAllUsernames();
        assertTrue("No users found!", users.size() > 0);
        assertTrue("Admin not found", users.contains("admin"));
        UserModel model = GitBlit.self().getUserModel("admin");
        assertTrue(model.toString().equals("admin"));
        assertTrue("Admin missing #admin role!", model.canAdmin);
        model.canAdmin = false;
        assertFalse("Admin should not hae #admin!", model.canAdmin);
        String repository = GitBlitSuite.getHelloworldRepository().getDirectory().getName();
        assertFalse("Admin can still access repository!", model.canAccessRepository(repository));
        model.addRepository(repository);
        assertTrue("Admin can't access repository!", model.canAccessRepository(repository));
    }
}
tests/com/gitblit/tests/JGitUtilsTest.java
@@ -29,9 +29,11 @@
import org.eclipse.jgit.revwalk.RevObject;
import org.eclipse.jgit.revwalk.RevTree;
import com.gitblit.models.Metric;
import com.gitblit.models.PathModel.PathChangeModel;
import com.gitblit.models.RefModel;
import com.gitblit.models.TicketModel;
import com.gitblit.models.TicketModel.Comment;
import com.gitblit.utils.DiffUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.JGitUtils.DiffOutputType;
@@ -69,6 +71,38 @@
                commit.getName().equals("f554664a346629dc2b839f7292d06bad2db4aece"));
    }
    public void testRefs() throws Exception {
        Repository repository = GitBlitSuite.getTicgitRepository();
        for (RefModel model : JGitUtils.getLocalBranches(repository, -1)) {
            assertTrue(model.getName().startsWith(Constants.R_HEADS));
            assertTrue(model.equals(model));
            assertFalse(model.equals(""));
            assertTrue(model.hashCode() == model.getCommitId().hashCode()
                    + model.getName().hashCode());
            assertTrue(model.getShortLog().equals(model.commit.getShortMessage()));
        }
        for (RefModel model : JGitUtils.getRemoteBranches(repository, -1)) {
            assertTrue(model.getName().startsWith(Constants.R_REMOTES));
            assertTrue(model.equals(model));
            assertFalse(model.equals(""));
            assertTrue(model.hashCode() == model.getCommitId().hashCode()
                    + model.getName().hashCode());
            assertTrue(model.getShortLog().equals(model.commit.getShortMessage()));
        }
        for (RefModel model : JGitUtils.getTags(repository, -1)) {
            if (model.getObjectId().getName().equals("283035e4848054ff1803cb0e690270787dc92399")) {
                assertTrue("Not an annotated tag!", model.isAnnotatedTag());
            }
            assertTrue(model.getName().startsWith(Constants.R_TAGS));
            assertTrue(model.equals(model));
            assertFalse(model.equals(""));
            assertTrue(model.hashCode() == model.getCommitId().hashCode()
                    + model.getName().hashCode());
            assertTrue(model.getShortLog().equals(model.commit.getShortMessage()));
        }
        repository.close();
    }
    public void testRetrieveRevObject() throws Exception {
        Repository repository = GitBlitSuite.getHelloworldRepository();
        RevCommit commit = JGitUtils.getCommit(repository, Constants.HEAD);
@@ -95,6 +129,12 @@
        List<PathChangeModel> paths = JGitUtils.getFilesInCommit(repository, commit);
        repository.close();
        assertTrue("No changed paths found!", paths.size() == 1);
        for (PathChangeModel path : paths) {
            assertTrue("PathChangeModel hashcode incorrect!",
                    path.hashCode() == (path.commitId.hashCode() + path.path.hashCode()));
            assertTrue("PathChangeModel equals itself failed!", path.equals(path));
            assertFalse("PathChangeModel equals string failed!", path.equals(""));
        }
    }
    public void testCommitDiff() throws Exception {
@@ -120,12 +160,34 @@
        repository.close();
    }
    public void testMetrics() throws Exception {
        Repository repository = GitBlitSuite.getHelloworldRepository();
        List<Metric> metrics = JGitUtils.getDateMetrics(repository);
        repository.close();
        assertTrue("No metrics found!", metrics.size() > 0);
    }
    public void testTicGit() throws Exception {
        Repository repository = GitBlitSuite.getTicgitRepository();
        RefModel branch = JGitUtils.getTicketsBranch(repository);
        assertTrue("Ticgit branch does not exist!", branch != null);
        List<TicketModel> tickets = JGitUtils.getTickets(repository);
        List<TicketModel> ticketsA = JGitUtils.getTickets(repository);
        List<TicketModel> ticketsB = JGitUtils.getTickets(repository);
        repository.close();
        assertTrue("No tickets found!", tickets.size() > 0);
        assertTrue("No tickets found!", ticketsA.size() > 0);
        for (int i = 0; i < ticketsA.size(); i++) {
            TicketModel ticketA = ticketsA.get(i);
            TicketModel ticketB = ticketsB.get(i);
            assertTrue("Tickets are not equal!", ticketA.equals(ticketB));
            assertFalse(ticketA.equals(""));
            assertTrue(ticketA.hashCode() == ticketA.id.hashCode());
            for (int j = 0; j < ticketA.comments.size(); j++) {
                Comment commentA = ticketA.comments.get(j);
                Comment commentB = ticketB.comments.get(j);
                assertTrue("Comments are not equal!", commentA.equals(commentB));
                assertFalse(commentA.equals(""));
                assertTrue(commentA.hashCode() == commentA.text.hashCode());
            }
        }
    }
}
tests/com/gitblit/tests/TimeUtilsTest.java
New file
@@ -0,0 +1,60 @@
package com.gitblit.tests;
import java.util.Date;
import junit.framework.TestCase;
import com.gitblit.utils.TimeUtils;
public class TimeUtilsTest extends TestCase {
    public void testToday() throws Exception {
        assertTrue("Is today failed!", TimeUtils.isToday(new Date()));
    }
    public void testYesterday() throws Exception {
        assertTrue("Is yesterday failed!", TimeUtils.isYesterday(new Date(System.currentTimeMillis() - TimeUtils.ONEDAY)));
    }
    public void testDurations() throws Exception {
        assertTrue(TimeUtils.duration(5).equals("5 days"));
        assertTrue(TimeUtils.duration(364).equals("12 months"));
        assertTrue(TimeUtils.duration(365 + 0).equals("1 year"));
        assertTrue(TimeUtils.duration(365 + 10).equals("1 year"));
        assertTrue(TimeUtils.duration(365 + 15).equals("1 year, 1 month"));
        assertTrue(TimeUtils.duration(365 + 30).equals("1 year, 1 month"));
        assertTrue(TimeUtils.duration(365 + 44).equals("1 year, 1 month"));
        assertTrue(TimeUtils.duration(365 + 45).equals("1 year, 2 months"));
        assertTrue(TimeUtils.duration(365 + 60).equals("1 year, 2 months"));
        assertTrue(TimeUtils.duration(2*365 + 0).equals("2 years"));
        assertTrue(TimeUtils.duration(2*365 + 10).equals("2 years"));
        assertTrue(TimeUtils.duration(2*365 + 15).equals("2 years, 1 month"));
        assertTrue(TimeUtils.duration(2*365 + 30).equals("2 years, 1 month"));
        assertTrue(TimeUtils.duration(2*365 + 44).equals("2 years, 1 month"));
        assertTrue(TimeUtils.duration(2*365 + 45).equals("2 years, 2 months"));
        assertTrue(TimeUtils.duration(2*365 + 60).equals("2 years, 2 months"));
    }
    public void testTimeAgo() throws Exception {
        long time = System.currentTimeMillis();
        assertTrue(TimeUtils.timeAgo(new Date(time - 1*TimeUtils.MIN)).equals("1 min ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 60*TimeUtils.MIN)).equals("60 mins ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 120*TimeUtils.MIN)).equals("2 hours ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 15*TimeUtils.ONEHOUR)).equals("15 hours ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 24*TimeUtils.ONEHOUR)).equals("yesterday"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 2*TimeUtils.ONEDAY)).equals("2 days ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 35*TimeUtils.ONEDAY)).equals("5 weeks ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 84*TimeUtils.ONEDAY)).equals("3 months ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 95*TimeUtils.ONEDAY)).equals("3 months ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 104*TimeUtils.ONEDAY)).equals("4 months ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 365*TimeUtils.ONEDAY)).equals("1 year ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - 395*TimeUtils.ONEDAY)).equals("13 months ago"));
        assertTrue(TimeUtils.timeAgo(new Date(time - (2*365 + 30)*TimeUtils.ONEDAY)).equals("2 years ago"));
        assertTrue(TimeUtils.timeAgoCss(new Date(time - 1*TimeUtils.MIN)).equals("age0"));
        assertTrue(TimeUtils.timeAgoCss(new Date(time - 60*TimeUtils.MIN)).equals("age0"));
        assertTrue(TimeUtils.timeAgoCss(new Date(time - 120*TimeUtils.MIN)).equals("age1"));
        assertTrue(TimeUtils.timeAgoCss(new Date(time - 24*TimeUtils.ONEHOUR)).equals("age1"));
        assertTrue(TimeUtils.timeAgoCss(new Date(time - 2*TimeUtils.ONEDAY)).equals("age2"));    }
}