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  				+ "session-id=the.client.sid";
32  
33  		FirstWant r = FirstWant.fromLine(line);
34  		assertEquals("want b9d4d1eb2f93058814480eae9e1b67550f46ee38",
35  				r.getLine());
36  		Set<String> capabilities = r.getCapabilities();
37  		Set<String> expectedCapabilities = new HashSet<>(
38  				Arrays.asList("no-progress", "include-tag", "ofs-delta"));
39  		assertEquals(expectedCapabilities, capabilities);
40  		assertEquals("JGit/unknown", r.getAgent());
41  		assertEquals("the.client.sid", r.getClientSID());
42  	}
43  
44  	@Test
45  	public void testFirstWantWithoutOptions() throws PackProtocolException {
46  		String line = "want b9d4d1eb2f93058814480eae9e1b67550f46ee38";
47  
48  		FirstWant r = FirstWant.fromLine(line);
49  		assertEquals("want b9d4d1eb2f93058814480eae9e1b67550f46ee38",
50  				r.getLine());
51  		assertTrue(r.getCapabilities().isEmpty());
52  		assertNull(r.getAgent());
53  	}
54  
55  	private String makeFirstWantLine(String capability) {
56  		return String.format("want b9d4d1eb2f93058814480eae9e1b67550f46ee38 %s", capability);
57  	}
58  
59  	@Test
60  	public void testFirstWantNoWhitespace() {
61  		try {
62  			FirstWant.fromLine(
63  					"want b9d4d1eb2f93058814480eae9e1b67550f400000capability");
64  			fail("Accepting first want line without SP between oid and first capability");
65  		} catch (PackProtocolException e) {
66  			// pass
67  		}
68  	}
69  
70  	@Test
71  	public void testFirstWantOnlyWhitespace() throws PackProtocolException {
72  		FirstWant r = FirstWant
73  				.fromLine("want b9d4d1eb2f93058814480eae9e1b67550f46ee38 ");
74  		assertEquals("want b9d4d1eb2f93058814480eae9e1b67550f46ee38",
75  				r.getLine());
76  	}
77  
78  	@Test
79  	public void testFirstWantValidCapabilityNames()
80  			throws PackProtocolException {
81  		List<String> validNames = Arrays.asList(
82  				"c", "cap", "C", "CAP", "1", "1cap", "cap-64k_test",
83  				"-", "-cap",
84  				"_", "_cap");
85  
86  		for (String capability: validNames) {
87  			FirstWant r = FirstWant.fromLine(makeFirstWantLine(capability));
88  			assertEquals(r.getCapabilities().size(), 1);
89  			assertTrue(r.getCapabilities().contains(capability));
90  		}
91  	}
92  
93  	@Test
94  	public void testFirstWantValidAgentName() throws PackProtocolException {
95  		FirstWant r = FirstWant.fromLine(makeFirstWantLine("agent=pack.age/Version"));
96  		assertEquals(r.getCapabilities().size(), 0);
97  		assertEquals("pack.age/Version", r.getAgent());
98  	}
99  
100 	@Test
101 	public void testFirstWantValidSessionID() throws PackProtocolException {
102 		FirstWant r = FirstWant
103 				.fromLine(makeFirstWantLine("session-id=client.session.id"));
104 		assertEquals(r.getCapabilities().size(), 0);
105 		assertEquals("client.session.id", r.getClientSID());
106 	}
107 }