def test_increment_decrement(self):

        val = MC.get(self.counter_name)
        for _ in range(INCREMENT_STEPS):
            MC.increment(self.counter_name)
        self.assertEqual(val + INCREMENT_STEPS, MC.get(self.counter_name))

        for _ in range(INCREMENT_STEPS):
            MC.decrement(self.counter_name)
        self.assertEqual(val, MC.get(self.counter_name))

        # Bulk Increment / Decrement
        MC.decrement(self.counter_name, INCREMENT_STEPS)
        self.assertEqual(val - INCREMENT_STEPS, MC.get(self.counter_name))

        MC.increment(self.counter_name, 2 * INCREMENT_STEPS)
        self.assertEqual(val + INCREMENT_STEPS, MC.get(self.counter_name))

        # Testing the aliases
        self.assertEqual(val + INCREMENT_STEPS, MC.value(self.counter_name))
        self.assertEqual(val + INCREMENT_STEPS, MC.count(self.counter_name))

        # Incrementing / Decrementing by Random amount
        expected_val = MC.get(self.counter_name)
        for _ in range(INCREMENT_STEPS):
            val = random.randint(-RAND_INCREMENT_MAX, RAND_INCREMENT_MAX)
            MC.increment(self.counter_name, val)
            expected_val += val
            val = random.randint(-RAND_INCREMENT_MAX, RAND_INCREMENT_MAX)
            MC.decrement(self.counter_name, val)
            expected_val -= val
        self.assertEqual(expected_val, MC.get(self.counter_name))
  def test_increment_decrement(self):

    val = MC.get(self.counter_name)
    for _ in range(INCREMENT_STEPS):
      MC.increment(self.counter_name)
    self.assertEqual(val + INCREMENT_STEPS, MC.get(self.counter_name))

    for _ in range(INCREMENT_STEPS):
      MC.decrement(self.counter_name)
    self.assertEqual(val, MC.get(self.counter_name))

    # Bulk Increment / Decrement
    MC.decrement(self.counter_name, INCREMENT_STEPS)
    self.assertEqual(val - INCREMENT_STEPS, MC.get(self.counter_name))

    MC.increment(self.counter_name, 2 * INCREMENT_STEPS)
    self.assertEqual(val + INCREMENT_STEPS, MC.get(self.counter_name))

    # Testing the aliases
    self.assertEqual(val + INCREMENT_STEPS, MC.value(self.counter_name))
    self.assertEqual(val + INCREMENT_STEPS, MC.count(self.counter_name))

    # Incrementing / Decrementing by Random amount
    expected_val = MC.get(self.counter_name)
    for _ in range(INCREMENT_STEPS):
      val = random.randint(-RAND_INCREMENT_MAX, RAND_INCREMENT_MAX)
      MC.increment(self.counter_name, val)
      expected_val += val
      val = random.randint(-RAND_INCREMENT_MAX, RAND_INCREMENT_MAX)
      MC.decrement(self.counter_name, val)
      expected_val -= val
    self.assertEqual(expected_val, MC.get(self.counter_name))
    def test_concurrenct_increment(self):
        print "Starting Concurrent Test. This will take time ..."
        value = MC.get(self.counter_name)
        self.quitevent = Event()
        threads = []
        results = [None] * NUM_THREADS
        for i in range(NUM_THREADS):
            thread = Thread(target=self.threadproc, args=(i, results))
            thread.start()
            threads.append(thread)
            time.sleep(DELAY_BETWEEN_THREADS)
        time.sleep(TIME_AT_PEAK_QPS)

        self.quitevent.set()
        for thread in threads:
            thread.join(1.0)
        actual_val = MC.get(self.counter_name)
        self.assertEqual(actual_val, sum(results) + value)
    def test_set_reset(self):

        # Setting the counter to a particular value
        expected_val = 1024
        MC.set(self.counter_name, expected_val)
        self.assertEqual(expected_val, MC.get(self.counter_name))

        # Reseting the counter to a particular value
        MC.reset(self.counter_name)
        self.assertEqual(0, MC.get(self.counter_name))

        # Deleting the counter from memcache and checking it's existence
        MC.put_to_datastore(self.counter_name, flush=True)
        self.assertTrue(MC.exist(self.counter_name))

        # Now permanently deleting the counter and checking it's existence
        MC.delete(self.counter_name)
        self.assertFalse(MC.exist(self.counter_name))
  def test_concurrenct_increment(self):
    print "Starting Concurrent Test. This will take time ..."
    value = MC.get(self.counter_name)
    self.quitevent = Event()
    threads = []
    results = [None] * NUM_THREADS
    for i in range(NUM_THREADS):
      thread = Thread(target=self.threadproc, args=(i, results))
      thread.start()
      threads.append(thread)
      time.sleep(DELAY_BETWEEN_THREADS)
    time.sleep(TIME_AT_PEAK_QPS)

    self.quitevent.set()
    for thread in threads:
      thread.join(1.0)
    actual_val = MC.get(self.counter_name)
    self.assertEqual(actual_val, sum(results) + value)
  def test_set_reset(self):

    # Setting the counter to a particular value
    expected_val = 1024
    MC.set(self.counter_name, expected_val)
    self.assertEqual(expected_val, MC.get(self.counter_name))

    # Reseting the counter to a particular value
    MC.reset(self.counter_name)
    self.assertEqual(0, MC.get(self.counter_name))

    # Deleting the counter from memcache and checking it's existence
    MC.put_to_datastore(self.counter_name, flush=True)
    self.assertTrue(MC.exist(self.counter_name))

    # Now permanently deleting the counter and checking it's existence
    MC.delete(self.counter_name)
    self.assertFalse(MC.exist(self.counter_name))
    def test_memcache_flush(self):

        # Attempt to raise error by flushing memcache without persisting
        expected_val = MC.get(self.counter_name) + (INCREMENT_STEPS * 2)
        for _ in range(INCREMENT_STEPS):
            MC.increment(self.counter_name, 2, persist_delay=1000)
        self.assertEqual(expected_val, MC.get(self.counter_name))

        memcache.flush_all()
        self.assertNotEqual(expected_val, MC.get(self.counter_name))

        # Same Operation with Force persistence
        expected_val = MC.get(self.counter_name) + (INCREMENT_STEPS * 2)
        for _ in range(INCREMENT_STEPS):
            MC.increment(self.counter_name, 2, persist_delay=1000)
        self.assertEqual(expected_val, MC.get(self.counter_name))
        MC.put_to_datastore(self.counter_name)

        memcache.flush_all()
        self.assertEqual(expected_val, MC.get(self.counter_name))
  def test_memcache_flush(self):

    # Attempt to raise error by flushing memcache without persisting
    expected_val = MC.get(self.counter_name) + (INCREMENT_STEPS * 2)
    for _ in range(INCREMENT_STEPS):
      MC.increment(self.counter_name, 2, persist_delay=1000)
    self.assertEqual(expected_val, MC.get(self.counter_name))

    memcache.flush_all()
    self.assertNotEqual(expected_val, MC.get(self.counter_name))

    # Same Operation with Force persistence
    expected_val = MC.get(self.counter_name) + (INCREMENT_STEPS * 2)
    for _ in range(INCREMENT_STEPS):
      MC.increment(self.counter_name, 2, persist_delay=1000)
    self.assertEqual(expected_val, MC.get(self.counter_name))
    MC.put_to_datastore(self.counter_name)

    memcache.flush_all()
    self.assertEqual(expected_val, MC.get(self.counter_name))