@Test public void testFsWithChildTokens() throws Exception { Credentials credentials = new Credentials(); Text service1 = new Text("singleTokenFs1"); Text service2 = new Text("singleTokenFs2"); MockFileSystem fs1 = createFileSystemForServiceName(service1); MockFileSystem fs2 = createFileSystemForServiceName(service2); MockFileSystem fs3 = createFileSystemForServiceName(null); MockFileSystem multiFs = createFileSystemForServiceName(null, fs1, fs2, fs3); multiFs.addDelegationTokens(renewer, credentials); verifyTokenFetch(multiFs, false); // has no tokens of own, only child tokens verifyTokenFetch(fs1, true); verifyTokenFetch(fs2, true); verifyTokenFetch(fs3, false); assertEquals(2, credentials.numberOfTokens()); assertNotNull(credentials.getToken(service1)); assertNotNull(credentials.getToken(service2)); }
@Test public void testFsWithDuplicateChildren() throws Exception { Credentials credentials = new Credentials(); Text service = new Text("singleTokenFs1"); MockFileSystem fs = createFileSystemForServiceName(service); MockFileSystem multiFs = createFileSystemForServiceName(null, fs, new FilterFileSystem(fs)); multiFs.addDelegationTokens(renewer, credentials); verifyTokenFetch(multiFs, false); verifyTokenFetch(fs, true); assertEquals(1, credentials.numberOfTokens()); assertNotNull(credentials.getToken(service)); }
@Test public void testFsWithDuplicateChildrenTokenExists() throws Exception { Credentials credentials = new Credentials(); Text service = new Text("singleTokenFs1"); Token<?> token = mock(Token.class); credentials.addToken(service, token); MockFileSystem fs = createFileSystemForServiceName(service); MockFileSystem multiFs = createFileSystemForServiceName(null, fs, new FilterFileSystem(fs)); multiFs.addDelegationTokens(renewer, credentials); verifyTokenFetch(multiFs, false); verifyTokenFetch(fs, false); assertEquals(1, credentials.numberOfTokens()); assertSame(token, credentials.getToken(service)); }
@Test public void testFsWithChildTokensOneExists() throws Exception { Credentials credentials = new Credentials(); Text service1 = new Text("singleTokenFs1"); Text service2 = new Text("singleTokenFs2"); Token<?> token = mock(Token.class); credentials.addToken(service2, token); MockFileSystem fs1 = createFileSystemForServiceName(service1); MockFileSystem fs2 = createFileSystemForServiceName(service2); MockFileSystem fs3 = createFileSystemForServiceName(null); MockFileSystem multiFs = createFileSystemForServiceName(null, fs1, fs2, fs3); multiFs.addDelegationTokens(renewer, credentials); verifyTokenFetch(multiFs, false); verifyTokenFetch(fs1, true); verifyTokenFetch(fs2, false); // we had added its token to credentials verifyTokenFetch(fs3, false); assertEquals(2, credentials.numberOfTokens()); assertNotNull(credentials.getToken(service1)); assertSame(token, credentials.getToken(service2)); }
@Test public void testFsWithMyOwnAndChildTokens() throws Exception { Credentials credentials = new Credentials(); Text service1 = new Text("singleTokenFs1"); Text service2 = new Text("singleTokenFs2"); Text myService = new Text("multiTokenFs"); Token<?> token = mock(Token.class); credentials.addToken(service2, token); MockFileSystem fs1 = createFileSystemForServiceName(service1); MockFileSystem fs2 = createFileSystemForServiceName(service2); MockFileSystem multiFs = createFileSystemForServiceName(myService, fs1, fs2); multiFs.addDelegationTokens(renewer, credentials); verifyTokenFetch(multiFs, true); // its own token and also of its children verifyTokenFetch(fs1, true); verifyTokenFetch(fs2, false); // we had added its token to credentials assertEquals(3, credentials.numberOfTokens()); assertNotNull(credentials.getToken(myService)); assertNotNull(credentials.getToken(service1)); assertNotNull(credentials.getToken(service2)); }
@Test public void testFsWithMyOwnExistsAndChildTokens() throws Exception { Credentials credentials = new Credentials(); Text service1 = new Text("singleTokenFs1"); Text service2 = new Text("singleTokenFs2"); Text myService = new Text("multiTokenFs"); Token<?> token = mock(Token.class); credentials.addToken(myService, token); MockFileSystem fs1 = createFileSystemForServiceName(service1); MockFileSystem fs2 = createFileSystemForServiceName(service2); MockFileSystem multiFs = createFileSystemForServiceName(myService, fs1, fs2); multiFs.addDelegationTokens(renewer, credentials); verifyTokenFetch(multiFs, false); // we had added its token to credentials verifyTokenFetch(fs1, true); verifyTokenFetch(fs2, true); assertEquals(3, credentials.numberOfTokens()); assertSame(token, credentials.getToken(myService)); assertNotNull(credentials.getToken(service1)); assertNotNull(credentials.getToken(service2)); }
public static MockFileSystem createFileSystemForServiceName( final Text service, final FileSystem... children) throws IOException { final MockFileSystem fs = new MockFileSystem(); final MockFileSystem mockFs = fs.getRawFileSystem(); if (service != null) { when(mockFs.getCanonicalServiceName()).thenReturn(service.toString()); when(mockFs.getDelegationToken(any(String.class))).thenAnswer( new Answer<Token<?>>() { @Override public Token<?> answer(InvocationOnMock invocation) throws Throwable { Token<?> token = new Token<TokenIdentifier>(); token.setService(service); return token; } }); } when(mockFs.getChildFileSystems()).thenReturn(children); return fs; }
private MockFileSystem createFileSystemForServiceName(final String service) throws IOException { MockFileSystem mockFs = new MockFileSystem(); when(mockFs.getCanonicalServiceName()).thenReturn(service); when(mockFs.getDelegationToken(any(String.class))).thenAnswer( new Answer<Token<?>>() { int unique = 0; @Override public Token<?> answer(InvocationOnMock invocation) throws Throwable { Token<?> token = new Token<TokenIdentifier>(); token.setService(new Text(service)); // use unique value so when we restore from token storage, we can // tell if it's really the same token token.setKind(new Text("token" + unique++)); return token; } }); return mockFs; }
@SuppressWarnings("deprecation") @Test public void testGetTokensForNamenodes() throws IOException, URISyntaxException { Path TEST_ROOT_DIR = new Path(System.getProperty("test.build.data", "test/build/data")); // ick, but need fq path minus file:/ String binaryTokenFile = FileSystem.getLocal(conf) .makeQualified(new Path(TEST_ROOT_DIR, "tokenFile")).toUri() .getPath(); MockFileSystem fs1 = createFileSystemForServiceName("service1"); Credentials creds = new Credentials(); Token<?> token1 = fs1.getDelegationToken(renewer); creds.addToken(token1.getService(), token1); // wait to set, else the obtain tokens call above will fail with FNF conf.set(MRJobConfig.MAPREDUCE_JOB_CREDENTIALS_BINARY, binaryTokenFile); creds.writeTokenStorageFile(new Path(binaryTokenFile), conf); TokenCache.obtainTokensForNamenodesInternal(fs1, creds, conf); String fs_addr = fs1.getCanonicalServiceName(); Token<?> nnt = TokenCache.getDelegationToken(creds, fs_addr); assertNotNull("Token for nn is null", nnt); }