/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.ignite.internal.processors.hadoop.impl.igfs;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.ignite.IgniteException;
import org.apache.ignite.hadoop.fs.CachingHadoopFileSystemFactory;
import org.apache.ignite.hadoop.fs.IgniteHadoopIgfsSecondaryFileSystem;
import org.apache.ignite.hadoop.util.ChainedUserNameMapper;
import org.apache.ignite.hadoop.util.KerberosUserNameMapper;
import org.apache.ignite.hadoop.util.UserNameMapper;
import org.apache.ignite.igfs.IgfsIpcEndpointConfiguration;
import org.apache.ignite.igfs.IgfsIpcEndpointType;
import org.apache.ignite.igfs.IgfsMode;
import org.apache.ignite.igfs.secondary.IgfsSecondaryFileSystem;
import org.apache.ignite.internal.processors.igfs.IgfsDualAbstractSelfTest;
import org.apache.ignite.lifecycle.LifecycleAware;
import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.IgniteFileSystem.IGFS_SCHEME;
import static org.apache.ignite.igfs.IgfsMode.PRIMARY;
/**
* Abstract test for Hadoop 1.0 file system stack.
*/
public abstract class Hadoop1DualAbstractTest extends IgfsDualAbstractSelfTest {
/** Secondary Ignite instance name */
private static final String IGNITE_INSTANCE_NAME = "grid_secondary";
/** Secondary file system name */
private static final String IGFS_NAME = "igfs_secondary";
/** Secondary file system REST endpoint port */
private static final int PORT = 11500;
/** Secondary file system REST endpoint configuration map. */
private static final IgfsIpcEndpointConfiguration SECONDARY_REST_CFG = new IgfsIpcEndpointConfiguration() {{
setType(IgfsIpcEndpointType.TCP);
setPort(PORT);
}};
/** Secondary file system authority. */
private static final String SECONDARY_AUTHORITY = IGFS_NAME + "@127.0.0.1:" + PORT;
/** Secondary file system authority. */
private static final String SECONDARY_WORKDIR = "workdir/test";
/** Secondary Fs configuration full path. */
protected String secondaryConfFullPath;
/** Secondary Fs URI. */
protected String secondaryUri;
/** Constructor.
*
* @param mode IGFS mode.
*/
public Hadoop1DualAbstractTest(IgfsMode mode) {
super(mode);
}
/**
* Creates secondary filesystems.
* @return IgfsSecondaryFileSystem
* @throws Exception On failure.
*/
@Override protected IgfsSecondaryFileSystem createSecondaryFileSystemStack() throws Exception {
startUnderlying();
prepareConfiguration();
KerberosUserNameMapper mapper1 = new KerberosUserNameMapper();
mapper1.setRealm("TEST.COM");
TestUserNameMapper mapper2 = new TestUserNameMapper();
ChainedUserNameMapper mapper = new ChainedUserNameMapper();
mapper.setMappers(mapper1, mapper2);
CachingHadoopFileSystemFactory factory = new CachingHadoopFileSystemFactory();
factory.setUri(secondaryUri);
factory.setConfigPaths(secondaryConfFullPath);
factory.setUserNameMapper(mapper);
IgniteHadoopIgfsSecondaryFileSystem second = new IgniteHadoopIgfsSecondaryFileSystem();
second.setFileSystemFactory(factory);
igfsSecondary = new HadoopIgfsSecondaryFileSystemTestAdapter(factory);
return second;
}
/**
* Starts underlying Ignite process.
* @throws IOException On failure.
*/
protected void startUnderlying() throws Exception {
startGridWithIgfs(IGNITE_INSTANCE_NAME, IGFS_NAME, PRIMARY, null, SECONDARY_REST_CFG, secondaryIpFinder);
}
/**
* Prepares Fs configuration.
* @throws IOException On failure.
*/
protected void prepareConfiguration() throws IOException {
Configuration secondaryConf = HadoopSecondaryFileSystemConfigurationTest.configuration(IGFS_SCHEME,
SECONDARY_AUTHORITY, true, true);
secondaryConf.setInt("fs.igfs.block.size", 1024);
secondaryConfFullPath = HadoopSecondaryFileSystemConfigurationTest.writeConfiguration(secondaryConf,
HadoopSecondaryFileSystemConfigurationTest.SECONDARY_CFG_PATH);
secondaryUri = HadoopSecondaryFileSystemConfigurationTest.mkUri(IGFS_SCHEME, SECONDARY_AUTHORITY,
SECONDARY_WORKDIR);
}
/**
* Test user name mapper.
*/
private static class TestUserNameMapper implements UserNameMapper, LifecycleAware {
/** */
private static final long serialVersionUID = 0L;
/** Started flag. */
private boolean started;
/** {@inheritDoc} */
@Nullable @Override public String map(String name) {
assert started;
assert name != null && name.contains("@");
return name.substring(0, name.indexOf("@"));
}
/** {@inheritDoc} */
@Override public void start() throws IgniteException {
started = true;
}
/** {@inheritDoc} */
@Override public void stop() throws IgniteException {
// No-op.
}
}
}