View Javadoc
1   /*
2    * Copyright (C) 2018, Google LLC. and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  package org.eclipse.jgit.internal.transport.parser;
11  
12  import static org.junit.Assert.assertEquals;
13  import static org.junit.Assert.assertNull;
14  import static org.junit.Assert.assertTrue;
15  import static org.junit.Assert.fail;
16  
17  import java.util.Arrays;
18  import java.util.HashSet;
19  import java.util.List;
20  import java.util.Set;
21  
22  import org.eclipse.jgit.errors.PackProtocolException;
23  import org.junit.Test;
24  
25  public class FirstWantTest {
26  
27  	@Test
28  	public void testFirstWantWithOptions() throws PackProtocolException {
29  		String line = "want b9d4d1eb2f93058814480eae9e1b67550f46ee38 "
30  				+ "no-progress include-tag ofs-delta agent=JGit/unknown";
31  
32  		FirstWant r = FirstWant.fromLine(line);
33  		assertEquals("want b9d4d1eb2f93058814480eae9e1b67550f46ee38",
34  				r.getLine());
35  		Set<String> capabilities = r.getCapabilities();
36  		Set<String> expectedCapabilities = new HashSet<>(
37  				Arrays.asList("no-progress", "include-tag", "ofs-delta"));
38  		assertEquals(expectedCapabilities, capabilities);
39  		assertEquals("JGit/unknown", r.getAgent());
40  	}
41  
42  	@Test
43  	public void testFirstWantWithoutOptions() throws PackProtocolException {
44  		String line = "want b9d4d1eb2f93058814480eae9e1b67550f46ee38";
45  
46  		FirstWant r = FirstWant.fromLine(line);
47  		assertEquals("want b9d4d1eb2f93058814480eae9e1b67550f46ee38",
48  				r.getLine());
49  		assertTrue(r.getCapabilities().isEmpty());
50  		assertNull(r.getAgent());
51  	}
52  
53  	private String makeFirstWantLine(String capability) {
54  		return String.format("want b9d4d1eb2f93058814480eae9e1b67550f46ee38 %s", capability);
55  	}
56  
57  	@Test
58  	public void testFirstWantNoWhitespace() {
59  		try {
60  			FirstWant.fromLine(
61  					"want b9d4d1eb2f93058814480eae9e1b67550f400000capability");
62  			fail("Accepting first want line without SP between oid and first capability");
63  		} catch (PackProtocolException e) {
64  			// pass
65  		}
66  	}
67  
68  	@Test
69  	public void testFirstWantOnlyWhitespace() throws PackProtocolException {
70  		FirstWant r = FirstWant
71  				.fromLine("want b9d4d1eb2f93058814480eae9e1b67550f46ee38 ");
72  		assertEquals("want b9d4d1eb2f93058814480eae9e1b67550f46ee38",
73  				r.getLine());
74  	}
75  
76  	@Test
77  	public void testFirstWantValidCapabilityNames()
78  			throws PackProtocolException {
79  		List<String> validNames = Arrays.asList(
80  				"c", "cap", "C", "CAP", "1", "1cap", "cap-64k_test",
81  				"-", "-cap",
82  				"_", "_cap");
83  
84  		for (String capability: validNames) {
85  			FirstWant r = FirstWant.fromLine(makeFirstWantLine(capability));
86  			assertEquals(r.getCapabilities().size(), 1);
87  			assertTrue(r.getCapabilities().contains(capability));
88  		}
89  	}
90  
91  	@Test
92  	public void testFirstWantValidAgentName() throws PackProtocolException {
93  		FirstWant r = FirstWant.fromLine(makeFirstWantLine("agent=pack.age/Version"));
94  		assertEquals(r.getCapabilities().size(), 0);
95  		assertEquals("pack.age/Version", r.getAgent());
96  	}
97  }