diff --git a/pyogp/lib/base/tests/base.py b/pyogp/lib/base/tests/base.py new file mode 100644 index 0000000..5c0ab30 --- /dev/null +++ b/pyogp/lib/base/tests/base.py @@ -0,0 +1,92 @@ +import BaseHTTPServer +from indra.base import llsd +from webob import Request, Response + + +class AgentDomain(object): + + def __call__(self, environ, start_response): + self.environ = environ + self.start = start_response + import pdb; pdb.set_trace() + self.request = Request(environ) + self.response = Response() + + + l = int(self.request.headers.get('Content-Length','0')) + data = self.request.body + + # we assume it's LLSD for now and try to parse it + # TODO: check headers + try: + data = llsd.parse(data) + except: + self.response.status=500 + return self.response(self.environ, self.start) + if self.request.path=="/": + return self.handle_login(data) + elif self.request.path=="/seed_cap": + return self.handle_seedcap(data) + elif self.request.path=="/cap/place_avatar": + return self.place_avatar(data) + else: + return self.send_response(404) + + def handle_seedcap(self, data): + """return some other caps""" + caps = data.get("caps",[]) + d = {'lastname': 'lastname', 'firstname': 'firstname'} + return_caps = {} + for cap in caps: + # simple mapping from capname => host/cap/ instead of UUIDs + return_caps[cap]="http://localhost:12345/cap/%s" %cap + d['caps'] = return_caps + data = llsd.format_xml(d) + self.response.status=200 + self.response.content_type='application/llsd+xml' + self.response.body = data + return self.response(self.environ, self.start) + + def place_avatar(self, data): + """place the avatar in a dummy way""" + url = data.get("region_url",'') + d={'sim_ip':'127.0.0.1', + 'sim_port' : 12345} + data = llsd.format_xml(d) + self.response.status=200 + self.response.content_type='application/llsd+xml' + self.response.body = data + return self.response(self.environ, self.start) + + def handle_login(self,data): + """handle the login string""" + # TODO: test for all the correct fields in the data + password = data.get('password') + if password!='secret': + self.send_response(400) + return + + data={'agent_seed_capability':"http://127.0.0.1:12345/seed_cap"} + data = llsd.format_xml(data) + + self.response.status=200 + self.response.content_type='application/llsd+xml' + self.response.body=data + return self.response(self.environ, self.start) + + def send_response(self, status): + self.response.status = status + return self.response(self.environ, self.start) + + + + +def main(): + from wsgiref.simple_server import make_server + httpd = make_server('', 12345, AgentDomain()) + + # Respond to requests until process is killed + httpd.serve_forever() + +if __name__=="__main__": + main()