Example #1
0
  def test_simple(self):
    oid = self.createObject(RaleighSSet.TYPE)
    sset = RaleighSSet(self.client, oid)

    sset.insert('key-01', 'value-01')
    sset.insert('key-02', 'value-02')
    data = sset.get('key-01')
    self.assertEquals(data['value'], 'value-01')
    data = sset.get('key-02')
    self.assertEquals(data['value'], 'value-02')
    self.assertRaises(RaleighException, sset.get, 'key-03')

    data = sset.scan(2)
    self.assertEquals(data['keys'], ['key-01', 'key-02'])
    self.assertEquals(data['values'], ['value-01', 'value-02'])

    data = sset.pop('key-01')
    self.assertEquals(data['value'], 'value-01')
    self.assertRaises(RaleighException, sset.get, 'key-01')

    data = sset.scan(2)
    self.assertEquals(data['keys'], ['key-02'])
    self.assertEquals(data['values'], ['value-02'])

    data = sset.update('key-02', 'value-02b')
    self.assertEquals(data['old_value'], 'value-02')
    data = sset.get('key-02')
    self.assertEquals(data['value'], 'value-02b')
Example #2
0
  def test_long_run(self):
    oid = self.createObject(RaleighSSet.TYPE)
    sset = RaleighSSet(self.client, oid)

    hkey = lambda x: sha1('%d' % x).hexdigest()
    hval = lambda x, v: sha1('%d-v%s' % (x, v)).hexdigest()
    NKEYS = (64 * 1024) / (20 + 40)
    VERIFY_MOD = 100

    class Data:
      def __init__(self):
        self.data = []
        self.rm_keys = set()

      def __len__(self):
        return len(self.data)

      def get(self, key):
        index = self._get_index(key)
        return index, self.data[index][1]

      def insert(self, key, value):
        insort(self.data, (key, value))

      def update(self, key, value):
        index = self._get_index(key)
        self.data[index] = (key, value)

      def remove(self, key):
        del self.data[self._get_index(key)]
        self.rm_keys.add(key)

      def is_removed(self, key):
        return key in self.rm_keys

      def _get_index(self, key):
        index = bisect_left(self.data, (key, None))
        if index != len(self.data) and self.data[index][0] == key:
          return index
        raise ValueError

    def _verify_sset_data(sset, test_data):
      for j in xrange(len(test_data)):
        key = hkey(j)
        if test_data.is_removed(key):
          self.assertRaises(RaleighException, sset.get, key)
        else:
          _, value = test_data.get(key)
          result = sset.get(key)
          self.assertEquals(result['value'], value)

      for j, (key, value) in enumerate(sset.create_scanner()):
        index, test_value = test_data.get(key)
        self.assertEquals(test_value, value)
        self.assertEquals(index, j)

    test_data = Data()

    # Insert and Verify
    for i in xrange(NKEYS):
      key, value = hkey(i), hval(i, 1)
      sset.insert(key, value)
      test_data.insert(key, value)
      if i % VERIFY_MOD == 0:
        _verify_sset_data(sset, test_data)
    _verify_sset_data(sset, test_data)

    # Update and Verify
    for i in xrange(0, NKEYS, 2):
      key, value = hkey(i), hval(i, 2)
      sset.update(key, value)
      test_data.update(key, value)
      if i % VERIFY_MOD == 0:
        _verify_sset_data(sset, test_data)
    _verify_sset_data(sset, test_data)

    # Delete and Verify
    for i in xrange(1, NKEYS, 2):
      key = hkey(i)
      sset.pop(key)
      test_data.remove(key)
      if i % VERIFY_MOD == 0:
        _verify_sset_data(sset, test_data)
    _verify_sset_data(sset, test_data)