def test1(self): data1 = random_string(10) time.sleep(1) print "test normal write" proxy = BeansDBProxy([self.proxy_addr]) proxy.delete('key1') proxy.set('key1', data1) self._assert_data(self.backend1_addr, 'key1', data1) self._assert_data(self.backend2_addr, 'key1', data1) self._assert_data(self.backend3_addr, 'key1', data1) self.assert_(MCStore(self.backend2_addr).exists('key1')) cmd = "ls -l /proc/%s/fd" % (self.proxy_p.pid) print cmd print subprocess.check_output(cmd, shell=True) print "move log" if os.path.exists(self.accesslog_bak): os.remove(self.accesslog_bak) if os.path.exists(self.errorlog_bak): os.remove(self.errorlog_bak) os.rename(self.accesslog, self.accesslog_bak) os.rename(self.errorlog, self.errorlog_bak) print "write more data to see if new log not exists" data1 = random_string(10) proxy.set('key1', data1) self.assert_(not os.path.exists(self.accesslog)) self.assert_(not os.path.exists(self.errorlog)) time.sleep(5) print "send SIGINT signal, should re-open log file" os.kill(self.proxy_p.pid, signal.SIGINT) cmd = "ls -l /proc/%s/fd" % (self.proxy_p.pid) print subprocess.check_output(cmd, shell=True) s = os.stat(self.accesslog) self.assert_(os.path.exists(self.accesslog)) self.assert_(os.path.exists(self.errorlog)) print "see if write to new accesslog" proxy.get('key1') time.sleep(1) s_new = os.stat(self.accesslog) print s_new.st_size, s.st_size self.assert_(s_new.st_size > s.st_size)
def test1(self): data1 = random_string(10) data2 = random_string(10) time.sleep(1) print "test normal write" proxy = BeansDBProxy([self.proxy_addr]) proxy.delete('key1') proxy.set('key1', data1) self._assert_data(self.backend1_addr, 'key1', data1) self._assert_data(self.backend2_addr, 'key1', data1) self._assert_data(self.backend3_addr, 'key1', data1) self.assert_(MCStore(self.backend2_addr).exists('key1')) print "down backend2, proxy.get should be ok" self.backend2.stop() proxy.delete('key2') self.assert_(not proxy.exists('key2')) self.assert_(not MCStore(self.backend1_addr).exists('key2')) self.assert_(not MCStore(self.backend3_addr).exists('key2')) proxy.set('key2', data2) self.assertEqual(proxy.get('key2'), data2) self.assert_(proxy.exists('key2')) self.assert_(MCStore(self.backend3_addr).exists('key2')) self.assert_(MCStore(self.backend1_addr).exists('key2')) self._assert_data(self.proxy_addr, 'key2', data2) self._assert_data(self.backend1_addr, 'key2', data2) with self.assertRaises(Exception) as exc: MCStore(self.backend2_addr).get('key2') self._assert_data(self.backend3_addr, 'key2', data2) print "down backend1, proxy.get/set should fail" self.backend1.stop() self.assertEqual(proxy.get('key1'), data1) with self.assertRaises(Exception) as exc: MCStore(self.backend1_addr).get('key2') MCStore(self.backend2_addr).get('key2') with self.assertRaises(Exception) as exc: proxy.set('key2', data2)
def test2(self): data1 = random_string(10) data2 = random_string(10) time.sleep(1) print "test normal write" proxy = BeansDBProxy([self.proxy_addr]) proxy.delete('key1') proxy.set('key1', data1) self._assert_data(self.backend1_addr, 'key1', data1) self._assert_data(self.backend2_addr, 'key1', data1) self._assert_data(self.backend3_addr, 'key1', data1) self._assert_data(self.backend4_addr, 'key1', None, "temporary node should not have the key when all primary nodes is good") proxy.delete('key2') print "down backend1 and backend2, proxy.get should be ok" self.backend1.stop() self.backend2.stop() proxy.set('key2', data2) self.assertEqual(proxy.get('key2'), data2) self._assert_data(self.proxy_addr, 'key2', data2) with self.assertRaises(Exception) as exc: MCStore(self.backend1_addr).get('key2') MCStore(self.backend2_addr).get('key2') self._assert_data(self.backend3_addr, 'key2', data2) #"temporary node should have the key when primary nodes < 2" self._assert_data(self.backend4_addr, 'key2', data2) print "test delete under bad sistuation, will raise error according to current behavior" with self.assertRaises(Exception) as exc: proxy.delete('key2') self._assert_data(self.backend3_addr, 'key2', None) self._assert_data(self.backend4_addr, 'key2', None) print "start backend2, (backend1 still down), test delete" self.backend2.start() time.sleep(10) proxy.delete('key2') self._assert_data(self.proxy_addr, 'key2', None) self._assert_data(self.backend2_addr, 'key2', None) self._assert_data(self.backend3_addr, 'key2', None) self._assert_data(self.backend4_addr, 'key2', None)