content: /*
   * 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.cassandra.service.paxos.uncommitted;
  
  import java.util.Collection;
  import java.util.Collections;
  import java.util.Iterator;
  import java.util.List;
  
  import com.google.common.collect.Lists;
  
  import org.apache.cassandra.config.DatabaseDescriptor;
  import org.apache.cassandra.db.ColumnFamilyStore;
  import org.apache.cassandra.db.DecoratedKey;
  import org.apache.cassandra.db.Keyspace;
  import org.apache.cassandra.db.SystemKeyspace;
  import org.apache.cassandra.db.commitlog.CommitLog;
  import org.apache.cassandra.dht.ByteOrderedPartitioner;
  import org.apache.cassandra.dht.IPartitioner;
  import org.apache.cassandra.dht.Range;
  import org.apache.cassandra.dht.Token;
  import org.apache.cassandra.schema.TableMetadata;
  import org.apache.cassandra.service.paxos.Ballot;
  import org.apache.cassandra.utils.ByteBufferUtil;
  
  import static org.apache.cassandra.schema.SchemaConstants.SYSTEM_KEYSPACE_NAME;
  import static org.apache.cassandra.service.paxos.Ballot.Flag.GLOBAL;
  import static org.apache.cassandra.service.paxos.BallotGenerator.Global.nextBallot;
  
  class PaxosUncommittedTests
  {
      static
      {
          DatabaseDescriptor.daemonInitialization();
          CommitLog.instance.start();
      }
  
      static final IPartitioner PARTITIONER = ByteOrderedPartitioner.instance;
      static final Token MIN_TOKEN = PARTITIONER.getMinimumToken();
      static final Range<Token> FULL_RANGE = new Range<>(MIN_TOKEN, MIN_TOKEN);
      static final Collection<Range<Token>> ALL_RANGES = Collections.singleton(FULL_RANGE);
      static final ColumnFamilyStore PAXOS_CFS = Keyspace.open(SYSTEM_KEYSPACE_NAME).getColumnFamilyStore(SystemKeyspace.PAXOS);
      static final TableMetadata PAXOS_CFM = PAXOS_CFS.metadata.get();
      static final ColumnFamilyStore PAXOS_REPAIR_CFS = Keyspace.open(SYSTEM_KEYSPACE_NAME).getColumnFamilyStore(SystemKeyspace.PAXOS_REPAIR_HISTORY);
      static final TableMetadata PAXOS_REPAIR_CFM = PAXOS_REPAIR_CFS.metadata();
  
      static Ballot[] createBallots(int num)
      {
          Ballot[] ballots = new Ballot[num];
          for (int i=0; i<num; i++)
              ballots[i] = nextBallot(0, GLOBAL);
  
          return ballots;
      }
  
      static DecoratedKey dk(int v)
      {
          return DatabaseDescriptor.getPartitioner().decorateKey(ByteBufferUtil.bytes(v));
      }
  
      static List<PaxosKeyState> kl(Iterator<PaxosKeyState> iter)
      {
          return Lists.newArrayList(iter);
      }
  
      static List<PaxosKeyState> kl(PaxosKeyState... states)
      {
          return Lists.newArrayList(states);
      }
  
      static Token tk(int v)
      {
          return dk(v).getToken();
      }
  
      static Range<Token> r(Token start, Token stop)
      {
          return new Range<>(start != null ? start : MIN_TOKEN, stop != null ? stop : MIN_TOKEN);
      }
  
      static Range<Token> r(int start, int stop)
      {
          return r(PARTITIONER.getToken(ByteBufferUtil.bytes(start)), PARTITIONER.getToken(ByteBufferUtil.bytes(stop)));
      }
  
  }
  