/* * 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.accumulo.core.client.mock; import java.util.Collection; import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.Map; import java.util.SortedSet; import java.util.concurrent.atomic.AtomicInteger; import org.apache.accumulo.core.client.BatchScanner; import org.apache.accumulo.core.client.admin.TimeType; import org.apache.accumulo.core.client.impl.Namespaces; import org.apache.accumulo.core.client.impl.Tables; import org.apache.accumulo.core.client.security.tokens.PasswordToken; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.metadata.MetadataTable; import org.apache.accumulo.core.metadata.RootTable; import org.apache.accumulo.core.replication.ReplicationTable; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.core.security.NamespacePermission; import org.apache.accumulo.core.security.SystemPermission; import org.apache.accumulo.core.security.TablePermission; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.io.Text; /** * @deprecated since 1.8.0; use MiniAccumuloCluster or a standard mock framework instead. */ @Deprecated public class MockAccumulo { final Map<String,MockTable> tables = new HashMap<>(); final Map<String,MockNamespace> namespaces = new HashMap<>(); final Map<String,String> systemProperties = new HashMap<>(); Map<String,MockUser> users = new HashMap<>(); final FileSystem fs; final AtomicInteger tableIdCounter = new AtomicInteger(0); @Deprecated MockAccumulo(FileSystem fs) { MockUser root = new MockUser("root", new PasswordToken(new byte[0]), Authorizations.EMPTY); root.permissions.add(SystemPermission.SYSTEM); users.put(root.name, root); namespaces.put(Namespaces.DEFAULT_NAMESPACE, new MockNamespace()); namespaces.put(Namespaces.ACCUMULO_NAMESPACE, new MockNamespace()); createTable("root", RootTable.NAME, true, TimeType.LOGICAL); createTable("root", MetadataTable.NAME, true, TimeType.LOGICAL); createTable("root", ReplicationTable.NAME, true, TimeType.LOGICAL); this.fs = fs; } public FileSystem getFileSystem() { return fs; } void setProperty(String key, String value) { systemProperties.put(key, value); } String removeProperty(String key) { return systemProperties.remove(key); } public void addMutation(String table, Mutation m) { MockTable t = tables.get(table); t.addMutation(m); } public BatchScanner createBatchScanner(String tableName, Authorizations authorizations) { return new MockBatchScanner(tables.get(tableName), authorizations); } public void createTable(String username, String tableName, boolean useVersions, TimeType timeType) { Map<String,String> opts = Collections.emptyMap(); createTable(username, tableName, useVersions, timeType, opts); } public void createTable(String username, String tableName, boolean useVersions, TimeType timeType, Map<String,String> properties) { String namespace = Tables.qualify(tableName).getFirst(); if (!namespaceExists(namespace)) { return; } MockNamespace n = namespaces.get(namespace); MockTable t = new MockTable(n, useVersions, timeType, Integer.toString(tableIdCounter.incrementAndGet()), properties); t.userPermissions.put(username, EnumSet.allOf(TablePermission.class)); t.setNamespaceName(namespace); t.setNamespace(n); tables.put(tableName, t); } public void createTable(String username, String tableName, TimeType timeType, Map<String,String> properties) { String namespace = Tables.qualify(tableName).getFirst(); HashMap<String,String> props = new HashMap<>(properties); if (!namespaceExists(namespace)) { return; } MockNamespace n = namespaces.get(namespace); MockTable t = new MockTable(n, timeType, Integer.toString(tableIdCounter.incrementAndGet()), props); t.userPermissions.put(username, EnumSet.allOf(TablePermission.class)); t.setNamespaceName(namespace); t.setNamespace(n); tables.put(tableName, t); } public void createNamespace(String username, String namespace) { if (!namespaceExists(namespace)) { MockNamespace n = new MockNamespace(); n.userPermissions.put(username, EnumSet.allOf(NamespacePermission.class)); namespaces.put(namespace, n); } } public void addSplits(String tableName, SortedSet<Text> partitionKeys) { tables.get(tableName).addSplits(partitionKeys); } public Collection<Text> getSplits(String tableName) { return tables.get(tableName).getSplits(); } public void merge(String tableName, Text start, Text end) { tables.get(tableName).merge(start, end); } private boolean namespaceExists(String namespace) { return namespaces.containsKey(namespace); } }