Switch jgit library to the EDL (3-clause BSD)
[egit/zawir.git] / org.spearce.jgit.test / tst / org / spearce / jgit / transport / RemoteConfigTest.java
blob6b72b647881b5a77bf27bb379b6c51b30fa3aa8c
1 /*
2 * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
3 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
5 * All rights reserved.
7 * Redistribution and use in source and binary forms, with or
8 * without modification, are permitted provided that the following
9 * conditions are met:
11 * - Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
14 * - Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
19 * - Neither the name of the Git Development Community nor the
20 * names of its contributors may be used to endorse or promote
21 * products derived from this software without specific prior
22 * written permission.
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
25 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
26 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
29 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
31 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
36 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 package org.spearce.jgit.transport;
41 import java.io.File;
42 import java.io.FileNotFoundException;
43 import java.io.FileOutputStream;
44 import java.io.IOException;
45 import java.io.UnsupportedEncodingException;
46 import java.util.List;
48 import org.spearce.jgit.lib.RepositoryTestCase;
50 public class RemoteConfigTest extends RepositoryTestCase {
51 private void writeConfig(final String dat) throws FileNotFoundException,
52 IOException, UnsupportedEncodingException {
53 final File file = new File(db.getDirectory(), "config");
54 final FileOutputStream stream = new FileOutputStream(file, true);
55 try {
56 stream.write(dat.getBytes("UTF-8"));
57 } finally {
58 stream.close();
60 db.getConfig().load();
63 private static void assertEquals(final String exp, final URIish act) {
64 assertEquals(exp, act != null ? act.toString() : null);
67 public void testSimple() throws Exception {
68 writeConfig("[remote \"spearce\"]\n"
69 + "url = http://www.spearce.org/egit.git\n"
70 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n");
72 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
73 final List<URIish> allURIs = rc.getURIs();
74 RefSpec spec;
76 assertEquals("spearce", rc.getName());
77 assertNotNull(allURIs);
78 assertNotNull(rc.getFetchRefSpecs());
79 assertNotNull(rc.getPushRefSpecs());
80 assertNotNull(rc.getTagOpt());
81 assertSame(TagOpt.AUTO_FOLLOW, rc.getTagOpt());
83 assertEquals(1, allURIs.size());
84 assertEquals("http://www.spearce.org/egit.git", allURIs.get(0));
86 assertEquals(1, rc.getFetchRefSpecs().size());
87 spec = rc.getFetchRefSpecs().get(0);
88 assertTrue(spec.isForceUpdate());
89 assertTrue(spec.isWildcard());
90 assertEquals("refs/heads/*", spec.getSource());
91 assertEquals("refs/remotes/spearce/*", spec.getDestination());
93 assertEquals(0, rc.getPushRefSpecs().size());
96 public void testSimpleNoTags() throws Exception {
97 writeConfig("[remote \"spearce\"]\n"
98 + "url = http://www.spearce.org/egit.git\n"
99 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n"
100 + "tagopt = --no-tags\n");
101 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
102 assertSame(TagOpt.NO_TAGS, rc.getTagOpt());
105 public void testSimpleAlwaysTags() throws Exception {
106 writeConfig("[remote \"spearce\"]\n"
107 + "url = http://www.spearce.org/egit.git\n"
108 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n"
109 + "tagopt = --tags\n");
110 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
111 assertSame(TagOpt.FETCH_TAGS, rc.getTagOpt());
114 public void testMirror() throws Exception {
115 writeConfig("[remote \"spearce\"]\n"
116 + "url = http://www.spearce.org/egit.git\n"
117 + "fetch = +refs/heads/*:refs/heads/*\n"
118 + "fetch = refs/tags/*:refs/tags/*\n");
120 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
121 final List<URIish> allURIs = rc.getURIs();
122 RefSpec spec;
124 assertEquals("spearce", rc.getName());
125 assertNotNull(allURIs);
126 assertNotNull(rc.getFetchRefSpecs());
127 assertNotNull(rc.getPushRefSpecs());
129 assertEquals(1, allURIs.size());
130 assertEquals("http://www.spearce.org/egit.git", allURIs.get(0));
132 assertEquals(2, rc.getFetchRefSpecs().size());
134 spec = rc.getFetchRefSpecs().get(0);
135 assertTrue(spec.isForceUpdate());
136 assertTrue(spec.isWildcard());
137 assertEquals("refs/heads/*", spec.getSource());
138 assertEquals("refs/heads/*", spec.getDestination());
140 spec = rc.getFetchRefSpecs().get(1);
141 assertFalse(spec.isForceUpdate());
142 assertTrue(spec.isWildcard());
143 assertEquals("refs/tags/*", spec.getSource());
144 assertEquals("refs/tags/*", spec.getDestination());
146 assertEquals(0, rc.getPushRefSpecs().size());
149 public void testBackup() throws Exception {
150 writeConfig("[remote \"backup\"]\n"
151 + "url = http://www.spearce.org/egit.git\n"
152 + "url = user@repo.or.cz:/srv/git/egit.git\n"
153 + "push = +refs/heads/*:refs/heads/*\n"
154 + "push = refs/tags/*:refs/tags/*\n");
156 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
157 final List<URIish> allURIs = rc.getURIs();
158 RefSpec spec;
160 assertEquals("backup", rc.getName());
161 assertNotNull(allURIs);
162 assertNotNull(rc.getFetchRefSpecs());
163 assertNotNull(rc.getPushRefSpecs());
165 assertEquals(2, allURIs.size());
166 assertEquals("http://www.spearce.org/egit.git", allURIs.get(0));
167 assertEquals("user@repo.or.cz:/srv/git/egit.git", allURIs.get(1));
169 assertEquals(0, rc.getFetchRefSpecs().size());
171 assertEquals(2, rc.getPushRefSpecs().size());
172 spec = rc.getPushRefSpecs().get(0);
173 assertTrue(spec.isForceUpdate());
174 assertTrue(spec.isWildcard());
175 assertEquals("refs/heads/*", spec.getSource());
176 assertEquals("refs/heads/*", spec.getDestination());
178 spec = rc.getPushRefSpecs().get(1);
179 assertFalse(spec.isForceUpdate());
180 assertTrue(spec.isWildcard());
181 assertEquals("refs/tags/*", spec.getSource());
182 assertEquals("refs/tags/*", spec.getDestination());
185 public void testUploadPack() throws Exception {
186 writeConfig("[remote \"example\"]\n"
187 + "url = user@example.com:egit.git\n"
188 + "fetch = +refs/heads/*:refs/remotes/example/*\n"
189 + "uploadpack = /path/to/git/git-upload-pack\n"
190 + "receivepack = /path/to/git/git-receive-pack\n");
192 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "example");
193 final List<URIish> allURIs = rc.getURIs();
194 RefSpec spec;
196 assertEquals("example", rc.getName());
197 assertNotNull(allURIs);
198 assertNotNull(rc.getFetchRefSpecs());
199 assertNotNull(rc.getPushRefSpecs());
201 assertEquals(1, allURIs.size());
202 assertEquals("user@example.com:egit.git", allURIs.get(0));
204 assertEquals(1, rc.getFetchRefSpecs().size());
205 spec = rc.getFetchRefSpecs().get(0);
206 assertTrue(spec.isForceUpdate());
207 assertTrue(spec.isWildcard());
208 assertEquals("refs/heads/*", spec.getSource());
209 assertEquals("refs/remotes/example/*", spec.getDestination());
211 assertEquals(0, rc.getPushRefSpecs().size());
213 assertEquals("/path/to/git/git-upload-pack", rc.getUploadPack());
214 assertEquals("/path/to/git/git-receive-pack", rc.getReceivePack());
217 public void testUnknown() throws Exception {
218 writeConfig("");
220 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
221 assertEquals(0, rc.getURIs().size());
222 assertEquals(0, rc.getFetchRefSpecs().size());
223 assertEquals(0, rc.getPushRefSpecs().size());
224 assertEquals("git-upload-pack", rc.getUploadPack());
225 assertEquals("git-receive-pack", rc.getReceivePack());
228 public void testAddURI() throws Exception {
229 writeConfig("");
231 final URIish uri = new URIish("/some/dir");
232 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
233 assertEquals(0, rc.getURIs().size());
235 assertTrue(rc.addURI(uri));
236 assertEquals(1, rc.getURIs().size());
237 assertSame(uri, rc.getURIs().get(0));
239 assertFalse(rc.addURI(new URIish(uri.toString())));
240 assertEquals(1, rc.getURIs().size());
243 public void testRemoveFirstURI() throws Exception {
244 writeConfig("");
246 final URIish a = new URIish("/some/dir");
247 final URIish b = new URIish("/another/dir");
248 final URIish c = new URIish("/more/dirs");
249 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
250 assertTrue(rc.addURI(a));
251 assertTrue(rc.addURI(b));
252 assertTrue(rc.addURI(c));
254 assertEquals(3, rc.getURIs().size());
255 assertSame(a, rc.getURIs().get(0));
256 assertSame(b, rc.getURIs().get(1));
257 assertSame(c, rc.getURIs().get(2));
259 assertTrue(rc.removeURI(a));
260 assertEquals(2, rc.getURIs().size());
261 assertSame(b, rc.getURIs().get(0));
262 assertSame(c, rc.getURIs().get(1));
265 public void testRemoveMiddleURI() throws Exception {
266 writeConfig("");
268 final URIish a = new URIish("/some/dir");
269 final URIish b = new URIish("/another/dir");
270 final URIish c = new URIish("/more/dirs");
271 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
272 assertTrue(rc.addURI(a));
273 assertTrue(rc.addURI(b));
274 assertTrue(rc.addURI(c));
276 assertEquals(3, rc.getURIs().size());
277 assertSame(a, rc.getURIs().get(0));
278 assertSame(b, rc.getURIs().get(1));
279 assertSame(c, rc.getURIs().get(2));
281 assertTrue(rc.removeURI(b));
282 assertEquals(2, rc.getURIs().size());
283 assertSame(a, rc.getURIs().get(0));
284 assertSame(c, rc.getURIs().get(1));
287 public void testRemoveLastURI() throws Exception {
288 writeConfig("");
290 final URIish a = new URIish("/some/dir");
291 final URIish b = new URIish("/another/dir");
292 final URIish c = new URIish("/more/dirs");
293 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
294 assertTrue(rc.addURI(a));
295 assertTrue(rc.addURI(b));
296 assertTrue(rc.addURI(c));
298 assertEquals(3, rc.getURIs().size());
299 assertSame(a, rc.getURIs().get(0));
300 assertSame(b, rc.getURIs().get(1));
301 assertSame(c, rc.getURIs().get(2));
303 assertTrue(rc.removeURI(c));
304 assertEquals(2, rc.getURIs().size());
305 assertSame(a, rc.getURIs().get(0));
306 assertSame(b, rc.getURIs().get(1));
309 public void testRemoveOnlyURI() throws Exception {
310 writeConfig("");
312 final URIish a = new URIish("/some/dir");
313 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
314 assertTrue(rc.addURI(a));
316 assertEquals(1, rc.getURIs().size());
317 assertSame(a, rc.getURIs().get(0));
319 assertTrue(rc.removeURI(a));
320 assertEquals(0, rc.getURIs().size());
323 public void testCreateOrigin() throws Exception {
324 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "origin");
325 rc.addURI(new URIish("/some/dir"));
326 rc.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
327 + rc.getName() + "/*"));
328 rc.update(db.getConfig());
329 db.getConfig().save();
331 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
332 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
333 + "[remote \"origin\"]\n" + "\turl = /some/dir\n"
334 + "\tfetch = +refs/heads/*:refs/remotes/origin/*\n");
337 public void testSaveAddURI() throws Exception {
338 writeConfig("[remote \"spearce\"]\n"
339 + "url = http://www.spearce.org/egit.git\n"
340 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n");
342 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
343 rc.addURI(new URIish("/some/dir"));
344 assertEquals(2, rc.getURIs().size());
345 rc.update(db.getConfig());
346 db.getConfig().save();
348 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
349 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
350 + "[remote \"spearce\"]\n"
351 + "\turl = http://www.spearce.org/egit.git\n"
352 + "\turl = /some/dir\n"
353 + "\tfetch = +refs/heads/*:refs/remotes/spearce/*\n");
356 public void testSaveRemoveLastURI() throws Exception {
357 writeConfig("[remote \"spearce\"]\n"
358 + "url = http://www.spearce.org/egit.git\n"
359 + "url = /some/dir\n"
360 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n");
362 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
363 assertEquals(2, rc.getURIs().size());
364 rc.removeURI(new URIish("/some/dir"));
365 assertEquals(1, rc.getURIs().size());
366 rc.update(db.getConfig());
367 db.getConfig().save();
369 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
370 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
371 + "[remote \"spearce\"]\n"
372 + "\turl = http://www.spearce.org/egit.git\n"
373 + "\tfetch = +refs/heads/*:refs/remotes/spearce/*\n");
376 public void testSaveRemoveFirstURI() throws Exception {
377 writeConfig("[remote \"spearce\"]\n"
378 + "url = http://www.spearce.org/egit.git\n"
379 + "url = /some/dir\n"
380 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n");
382 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
383 assertEquals(2, rc.getURIs().size());
384 rc.removeURI(new URIish("http://www.spearce.org/egit.git"));
385 assertEquals(1, rc.getURIs().size());
386 rc.update(db.getConfig());
387 db.getConfig().save();
389 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
390 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
391 + "[remote \"spearce\"]\n" + "\turl = /some/dir\n"
392 + "\tfetch = +refs/heads/*:refs/remotes/spearce/*\n");
395 public void testSaveNoTags() throws Exception {
396 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "origin");
397 rc.addURI(new URIish("/some/dir"));
398 rc.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
399 + rc.getName() + "/*"));
400 rc.setTagOpt(TagOpt.NO_TAGS);
401 rc.update(db.getConfig());
402 db.getConfig().save();
404 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
405 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
406 + "[remote \"origin\"]\n" + "\turl = /some/dir\n"
407 + "\tfetch = +refs/heads/*:refs/remotes/origin/*\n"
408 + "\ttagopt = --no-tags\n");
411 public void testSaveAllTags() throws Exception {
412 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "origin");
413 rc.addURI(new URIish("/some/dir"));
414 rc.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
415 + rc.getName() + "/*"));
416 rc.setTagOpt(TagOpt.FETCH_TAGS);
417 rc.update(db.getConfig());
418 db.getConfig().save();
420 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
421 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
422 + "[remote \"origin\"]\n" + "\turl = /some/dir\n"
423 + "\tfetch = +refs/heads/*:refs/remotes/origin/*\n"
424 + "\ttagopt = --tags\n");