Форум сайта python.su
Привет. Пишу маленькую утилитку, которая должна:
1) Ставится на каждый из узлов кластера
2) Посылать сообщения на другие узлы кластера. Нагрузку можно менять.
3) Принимать сообщения с других узлов кластера.
Выбрал Twisted. Вот что получилось:
Multicast.py:
from twisted.internet.protocol import DatagramProtocol, Factory
from twisted.internet import defer
from time import time
class MulticastServerUDP(DatagramProtocol):
def __init__(self, adress, changefunction):
self.adress = adress
self.changefunction = changefunction
def startProtocol(self):
print ‘Started Listening’
# Join a specific multicast group
self.transport.joinGroup(self.adress)
def datagramReceived(self, datagram, address):
if datagram == “System”:
print " ' + repr(datagram) + “ from ” + repr(address)
self.changefunction(datagram)
class MulticastClient(DatagramProtocol):
def __init__(self, data, adress):
self.data = data
self.adress = adress
def SendPacket(self):
self.transport.write(self.data, self.adress)
main.py
from twisted.internet import reactor, task
from twisted.application.internet import MulticastServer
from twisted.internet.protocol import DatagramProtocol
import LoadingProgram.Multicast
SendPacketLoopTime = 1
MulticastGroupAdress = ('224.0.0.1', 8005)
MulticastListeningInterface = ‘0.0.0.0’
def ChangeFunction(data):
SendPacketLoopTime = float(data)
loopSendPacket.stop()
loopSendPacket.start(SendPacketLoopTime)
# Listen for multicast on MulticastGroupAdress
serverprotocol = LoadingProgram.Multicast.MulticastServerUDP(MulticastGroupAdress, ChangeFunction)
reactor.listenMulticast(8005, serverprotocol, MulticastListeningInterface)
# Send multicast on MulticastGroupAdress from our dynamically allocated port
clientprotocol = LoadingProgram.Multicast.MulticastClient(u'UIR', MulticastGroupAdress)
reactor.listenUDP(0, clientprotocol)
loopSendPacket = task.LoopingCall(clientprotocol.SendPacket)
loopSendPacket.start(SendPacketLoopTime)
reactor.run()
Программа замечательно выполняет свои ф-ии, однако, вдохновившись XP программированием и статьёй pythy (http://gorod-omsk.ru/blog/pythy/2006/07/30/from-perl-script-to-twisted-app-writing-unit-tests/) решил написать для неё тесты.
Однако никак не могу понять что тут нужно проверять и как проверять?
Может быть, гуру, посоветуете что-то?
Отредактировано (Апрель 1, 2007 17:51:20)
Офлайн
1) М.б. Kamaelia лучше подойдет для распределенных приложений (честно - не пробовал)
2) Я бы тестировал логику (поведение сервера/клиента), т.е. модуль MultiCast
3) Тестируется, заменяя транспорт StringIO, проверяются ответы ожидаемые и реальные (как это делается, описано в ссылаемой статье)
4) Неплохо бы использовать {code:python} для кода
Офлайн
j2aА что там конкретно надо тестировать?
2) Я бы тестировал логику (поведение сервера/клиента), т.е. модуль MultiCast
j2aИсправил. Не знал про тег.
4) Неплохо бы использовать {code:python} для кода
Офлайн