def test_txn(self):
    oid = self.createObject(RaleighDeque.TYPE)
    deque = RaleighDeque(self.client, oid)

    txn_1 = RaleighTransaction(self.client)
    txn_1.begin()

    txn_2 = RaleighTransaction(self.client)
    txn_2.begin()

    deque.push_front('A', txn_1.txn_id)
    self.assertRaises(RaleighException, deque.push_front, 'B', txn_2.txn_id)
    self.assertRaises(RaleighException, deque.push_front, 'B')
    self.assertRaises(RaleighException, deque.pop_front, txn_2.txn_id)
    self.assertRaises(RaleighException, deque.pop_front)

    data = deque.pop_front(txn_1.txn_id)
    self.assertEquals(data['data'], 'A')
    deque.push_front('C', txn_1.txn_id)
    txn_1.commit()

    deque.push_back('D', txn_2.txn_id)
    self.assertRaises(RaleighException, deque.push_back, 'E')
    self.assertRaises(RaleighException, deque.pop_back)
    data = deque.pop_back(txn_2.txn_id)
    self.assertEquals(data['data'], 'D')
    deque.push_back('F', txn_2.txn_id)
    txn_2.rollback()

    data = deque.pop_front()
    self.assertEquals(data['data'], 'C')
  def test_txn_multi_obj(self):
      def _sset_get(sset, key, txn_id, expected):
        try:
          data = sset.get(key, txn_id)
          print sset, data
          assert data['value'] == expected, (data['value'] == expected)
        except Exception as e:
          print sset, e
          assert expected == None, expected

      oid_1 = self.createObject(RaleighSSet.TYPE)
      sset_1 = RaleighSSet(self.client, oid_1)

      oid_2 = self.createObject(RaleighSSet.TYPE)
      sset_2 = RaleighSSet(self.client, oid_2)

      key = 'key-01'
      value = 'value-01'

      # Test Rollback
      txn = RaleighTransaction(self.client)
      txn.begin()
      sset_1.insert(key, value, txn.txn_id)
      sset_2.insert(key, value, txn.txn_id)

      self.assertRaises(RaleighException, sset_1.get, key)
      self.assertRaises(RaleighException, sset_2.get, key)
      data = sset_1.get(key, txn.txn_id)
      self.assertEquals(data['value'], value)
      data = sset_2.get(key, txn.txn_id)
      self.assertEquals(data['value'], value)

      txn.rollback()

      self.assertRaises(RaleighException, sset_1.get, key)
      self.assertRaises(RaleighException, sset_2.get, key)

      # Test Commit
      txn = RaleighTransaction(self.client)
      txn.begin()
      sset_1.insert(key, value, txn.txn_id)
      sset_2.insert(key, value, txn.txn_id)
      self.assertRaises(RaleighException, sset_1.get, key)
      self.assertRaises(RaleighException, sset_2.get, key)
      data = sset_1.get(key, txn.txn_id)
      self.assertEquals(data['value'], value)
      data = sset_2.get(key, txn.txn_id)
      self.assertEquals(data['value'], value)
      txn.commit()

      data = sset_1.get(key)
      self.assertEquals(data['value'], value)
      data = sset_2.get(key)
      self.assertEquals(data['value'], value)
  def test_txn_key_locked(self):
    oid = self.createObject(RaleighSSet.TYPE)
    sset = RaleighSSet(self.client, oid)

    txn_1 = RaleighTransaction(self.client)
    txn_1.begin()

    txn_2 = RaleighTransaction(self.client)
    txn_2.begin()

    sset.insert('key-01', 'value-01', txn_1.txn_id)
    self.assertRaises(RaleighException, sset.insert, 'key-01', 'value-02', txn_2.txn_id)

    txn_2.rollback()
    txn_1.commit()

    data = sset.get('key-01')
    self.assertEquals(data['value'], 'value-01')
  def test_txn(self):
    oid = self.createObject(RaleighNumber.TYPE)
    number = RaleighNumber(self.client, oid)

    txn_1 = RaleighTransaction(self.client)
    txn_1.begin()

    txn_2 = RaleighTransaction(self.client)
    txn_2.begin()

    data = number.inc(txn_1.txn_id)
    self.assertEquals(data['value'], 1)
    self.assertRaises(RaleighException, number.set, 10, txn_2.txn_id)
    self.assertRaises(RaleighException, number.cas, 10, 20, txn_2.txn_id)
    self.assertRaises(RaleighException, number.add, 10, txn_2.txn_id)
    self.assertRaises(RaleighException, number.mul, 10, txn_2.txn_id)
    data = number.get()
    self.assertEquals(data['value'], 0)
    data = number.get(txn_1.txn_id)
    self.assertEquals(data['value'], 1)

    txn_1.commit()

    number.inc(txn_2.txn_id)
    self.assertRaises(RaleighException, number.set, 10)
    self.assertRaises(RaleighException, number.cas, 10, 20)
    self.assertRaises(RaleighException, number.add, 10)
    self.assertRaises(RaleighException, number.mul, 10)
    data = number.get()
    self.assertEquals(data['value'], 1)
    data = number.get(txn_2.txn_id)
    self.assertEquals(data['value'], 2)

    txn_2.rollback()

    data = number.inc()
    self.assertEquals(data['value'], 2)