| // Copyright (C) 2017 The Android Open Source Project |
| // |
| // 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.google.gerrit.git; |
| |
| import static com.google.common.truth.Truth.assertThat; |
| |
| import com.google.common.collect.ImmutableList; |
| import com.google.common.io.MoreFiles; |
| import com.google.common.io.RecursiveDeleteOption; |
| import java.nio.file.Files; |
| import java.nio.file.Path; |
| import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription; |
| import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository; |
| import org.eclipse.jgit.internal.storage.file.FileRepository; |
| import org.eclipse.jgit.junit.TestRepository; |
| import org.eclipse.jgit.lib.Repository; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.Parameterized; |
| import org.junit.runners.Parameterized.Parameter; |
| import org.junit.runners.Parameterized.Parameters; |
| |
| @RunWith(Parameterized.class) |
| public class RefUpdateUtilRepoTest { |
| public enum RepoSetup { |
| LOCAL_DISK { |
| @Override |
| Repository setUpRepo() throws Exception { |
| Path p = Files.createTempDirectory("gerrit_repo_"); |
| try { |
| Repository repo = new FileRepository(p.toFile()); |
| repo.create(true); |
| return repo; |
| } catch (Exception e) { |
| delete(p); |
| throw e; |
| } |
| } |
| |
| @Override |
| void tearDownRepo(Repository repo) throws Exception { |
| delete(repo.getDirectory().toPath()); |
| } |
| |
| private void delete(Path p) throws Exception { |
| MoreFiles.deleteRecursively(p, RecursiveDeleteOption.ALLOW_INSECURE); |
| } |
| }, |
| |
| IN_MEMORY { |
| @Override |
| Repository setUpRepo() { |
| return new InMemoryRepository(new DfsRepositoryDescription("repo")); |
| } |
| |
| @Override |
| void tearDownRepo(Repository repo) {} |
| }; |
| |
| abstract Repository setUpRepo() throws Exception; |
| |
| abstract void tearDownRepo(Repository repo) throws Exception; |
| } |
| |
| @Parameters(name = "{0}") |
| public static ImmutableList<RepoSetup[]> data() { |
| return ImmutableList.copyOf(new RepoSetup[][] {{RepoSetup.LOCAL_DISK}, {RepoSetup.IN_MEMORY}}); |
| } |
| |
| @Parameter public RepoSetup repoSetup; |
| |
| private Repository repo; |
| |
| @Before |
| public void setUp() throws Exception { |
| repo = repoSetup.setUpRepo(); |
| } |
| |
| @After |
| public void tearDown() throws Exception { |
| if (repo != null) { |
| repoSetup.tearDownRepo(repo); |
| repo = null; |
| } |
| } |
| |
| @Test |
| public void deleteRefNoOp() throws Exception { |
| String ref = "refs/heads/foo"; |
| assertThat(repo.exactRef(ref)).isNull(); |
| RefUpdateUtil.deleteChecked(repo, "refs/heads/foo"); |
| assertThat(repo.exactRef(ref)).isNull(); |
| } |
| |
| @Test |
| public void deleteRef() throws Exception { |
| String ref = "refs/heads/foo"; |
| try (TestRepository<Repository> tr = new TestRepository<>(repo)) { |
| tr.branch(ref).commit().create(); |
| } |
| |
| assertThat(repo.exactRef(ref)).isNotNull(); |
| RefUpdateUtil.deleteChecked(repo, "refs/heads/foo"); |
| assertThat(repo.exactRef(ref)).isNull(); |
| } |
| } |