[Zodb-checkins] CVS: ZODB3/ZEO/tests - ConnectionTests.py:1.9
Barry Warsaw
barry@wooz.org
Thu, 12 Dec 2002 14:05:20 -0500
Update of /cvs-repository/ZODB3/ZEO/tests
In directory cvs.zope.org:/tmp/cvs-serv22492
Modified Files:
ConnectionTests.py
Log Message:
Substantial rewrite to use the new forker module api.
DummyDB.invalidate(): Add **kws since some of the tests try to use
keyword arguments.
Removed redundant keyword arguments from various openClientStorage()
calls.
=== ZODB3/ZEO/tests/ConnectionTests.py 1.8 => 1.9 ===
--- ZODB3/ZEO/tests/ConnectionTests.py:1.8 Mon Nov 4 14:22:54 2002
+++ ZODB3/ZEO/tests/ConnectionTests.py Thu Dec 12 14:05:19 2002
@@ -11,21 +11,23 @@
# FOR A PARTICULAR PURPOSE
#
##############################################################################
-import asyncore
+
import os
+import sys
+import time
import random
import select
import socket
-import sys
+import asyncore
import tempfile
import threading
-import time
import zLOG
from ZEO.ClientStorage import ClientStorage
from ZEO.Exceptions import Disconnected
from ZEO.zrpc.marshal import Marshaller
+from ZEO.tests import forker
from ZODB.Transaction import get_transaction, Transaction
from ZODB.POSException import ReadOnlyError
@@ -34,18 +36,17 @@
from ZODB.tests.StorageTestBase import zodb_pickle, zodb_unpickle
from ZODB.tests.StorageTestBase import handle_all_serials, ZERO
+
class DummyDB:
- def invalidate(self, *args):
+ def invalidate(self, *args, **kws):
pass
+
class ConnectionTests(StorageTestBase):
"""Tests that explicitly manage the server process.
To test the cache or re-connection, these test cases explicit
start and stop a ZEO storage server.
-
- This must be subclassed; the subclass must provide implementations
- of startServer() and shutdownServer().
"""
__super_setUp = StorageTestBase.setUp
@@ -67,16 +68,35 @@
self._newAddr()
self.startServer()
- # startServer(), shutdownServer() are defined in OS-specific subclasses
+ def tearDown(self):
+ """Try to cause the tests to halt"""
+ zLOG.LOG("testZEO", zLOG.INFO, "tearDown() %s" % self.id())
+ if getattr(self, '_storage', None) is not None:
+ self._storage.close()
+ if hasattr(self._storage, 'cleanup'):
+ self._storage.cleanup()
+ for adminaddr in self._servers:
+ if adminaddr is not None:
+ forker.shutdown_zeo_server(adminaddr)
+ for i in 0, 1:
+ path = "c1-test-%d.zec" % i
+ if os.path.exists(path):
+ try:
+ os.unlink(path)
+ except os.error:
+ pass
+ self.__super_tearDown()
def _newAddr(self):
self.addr.append(self._getAddr())
def _getAddr(self):
- # On windows, port+1 is also used (see winserver.py), so only
- # draw even port numbers
+ # port+1 is also used, so only draw even port numbers
return 'localhost', random.randrange(25000, 30000, 2)
+ def getConfig(self):
+ raise NotImplementedError
+
def openClientStorage(self, cache='', cache_size=200000, wait=1,
read_only=0, read_only_fallback=0,
addr=None):
@@ -92,36 +112,24 @@
storage.registerDB(DummyDB(), None)
return storage
- def shutdownServer(self, index=0):
- raise NotImplementedError
-
def startServer(self, create=1, index=0, read_only=0, ro_svr=0):
- raise NotImplementedError
+ addr = self.addr[index]
+ zLOG.LOG("testZEO", zLOG.INFO,
+ "startServer(create=%d, index=%d, read_only=%d) @ %s" %
+ (create, index, read_only, addr))
+ path = "%s.%d" % (self.file, index)
+ conf = self.getConfig(path, create, read_only)
+ zeoport, adminaddr, pid = forker.start_zeo_server(conf, addr, ro_svr)
+ self._pids.append(pid)
+ self._servers.append(adminaddr)
- def tearDown(self):
- """Try to cause the tests to halt"""
- zLOG.LOG("testZEO", zLOG.INFO, "tearDown() %s" % self.id())
- if getattr(self, '_storage', None) is not None:
- self._storage.close()
- for i in range(len(self._servers)):
- self.shutdownServer(i)
- # file storage appears to create four files
- for i in range(len(self.addr)):
- for ext in '', '.index', '.lock', '.tmp':
- path = "%s.%s%s" % (self.file, i, ext)
- if os.path.exists(path):
- try:
- os.unlink(path)
- except os.error:
- pass
- for i in 0, 1:
- path = "c1-test-%d.zec" % i
- if os.path.exists(path):
- try:
- os.unlink(path)
- except os.error:
- pass
- self.__super_tearDown()
+ def shutdownServer(self, index=0):
+ zLOG.LOG("testZEO", zLOG.INFO, "shutdownServer(index=%d) @ %s" %
+ (index, self._servers[index]))
+ adminaddr = self._servers[index]
+ if adminaddr is not None:
+ forker.shutdown_zeo_server(adminaddr)
+ self._servers[index] = None
def pollUp(self, timeout=30.0):
# Poll until we're connected
@@ -146,7 +154,7 @@
def checkMultipleAddresses(self):
for i in range(4):
self._newAddr()
- self._storage = self.openClientStorage('test', 100000, wait=1)
+ self._storage = self.openClientStorage('test', 100000)
oid = self._storage.new_oid()
obj = MinPO(12)
self._dostore(oid, data=obj)
@@ -157,7 +165,7 @@
# commit at each one.
self._newAddr()
- self._storage = self.openClientStorage('test', 100000, wait=1)
+ self._storage = self.openClientStorage('test', 100000)
self._dostore()
self.shutdownServer(index=0)
@@ -230,7 +238,7 @@
# Start a read-only server
self.startServer(create=0, index=0, read_only=1)
# Start a read-only-fallback client
- self._storage = self.openClientStorage(wait=1, read_only_fallback=1)
+ self._storage = self.openClientStorage(read_only_fallback=1)
# Stores should fail here
self.assertRaises(ReadOnlyError, self._dostore)
@@ -245,7 +253,7 @@
# Start a read-only server
self.startServer(create=0, index=0, ro_svr=1)
# Start a read-only-fallback client
- self._storage = self.openClientStorage(wait=1, read_only_fallback=1)
+ self._storage = self.openClientStorage(read_only_fallback=1)
# Stores should fail here
self.assertRaises(ReadOnlyError, self._dostore)
@@ -257,7 +265,7 @@
# A read-write client reconnects to a read-write server
# Start a client
- self._storage = self.openClientStorage(wait=1)
+ self._storage = self.openClientStorage()
# Stores should succeed here
self._dostore()
@@ -282,7 +290,7 @@
# read-only server
# Start a client
- self._storage = self.openClientStorage(wait=1, read_only=1)
+ self._storage = self.openClientStorage(read_only=1)
# Stores should fail here
self.assertRaises(ReadOnlyError, self._dostore)
@@ -307,7 +315,7 @@
# read-only server
# Start a client in fallback mode
- self._storage = self.openClientStorage(wait=1, read_only_fallback=1)
+ self._storage = self.openClientStorage(read_only_fallback=1)
# Stores should succeed here
self._dostore()
@@ -339,7 +347,7 @@
# Start a read-only server
self.startServer(create=0, read_only=1)
# Start a client in fallback mode
- self._storage = self.openClientStorage(wait=1, read_only_fallback=1)
+ self._storage = self.openClientStorage(read_only_fallback=1)
# Stores should fail here
self.assertRaises(ReadOnlyError, self._dostore)
@@ -374,7 +382,7 @@
# Start a read-only server
self.startServer(create=0, index=0, read_only=1)
# Start a client in fallback mode
- self._storage = self.openClientStorage(wait=1, read_only_fallback=1)
+ self._storage = self.openClientStorage(read_only_fallback=1)
# Stores should fail here
self.assertRaises(ReadOnlyError, self._dostore)
@@ -406,7 +414,7 @@
# server and then starts a new client with the server down.
# When the server is down, a load() gets the data from its cache.
- self._storage = self.openClientStorage('test', 100000, wait=1)
+ self._storage = self.openClientStorage('test', 100000)
oid = self._storage.new_oid()
obj = MinPO(12)
revid1 = self._dostore(oid, data=obj)
@@ -424,7 +432,7 @@
# In this case, only one object fits in a cache file. When the
# cache files swap, the first object is effectively uncached.
- self._storage = self.openClientStorage('test', 1000, wait=1)
+ self._storage = self.openClientStorage('test', 1000)
oid1 = self._storage.new_oid()
obj1 = MinPO("1" * 500)
self._dostore(oid1, data=obj1)