#!/usr/bin/env python
############################################################################
# David W. Robertson, LBNL
# See LBNLCopyright for copyright notice!
###########################################################################
import sys, unittest
from ServiceTest import ServiceTestCase,ServiceTestSuite
import re
from ZSI import EvaluateException
"""
Unittest for contacting the TerraService Web service.
WSDL: http://terraservice.net/TerraService.asmx?WSDL
"""
CONFIG_FILE = 'config.txt'
CONFIG_SECTION = 'complex_types'
SERVICE_NAME = 'TerraService'
PORT_NAME = 'TerraServiceSoap'
EXCEPTION_STRING_SERIALIZE = r"Serializing ConvertPlaceToLonLatPt xmlns=\"http://terraserver-usa.com/terraserver/\"._place, Exception Serializing place xmlns=\"http://terraserver-usa.com/terraserver/\"._City, AttributeError 'int' object has no attribute \'replace\'"
SERIALIZE_PATTERN = re.compile(EXCEPTION_STRING_SERIALIZE)
class TerraServiceTest(ServiceTestCase):
"""Test case for TerraService Web service
"""
name = "test_TerraService"
def test_ConvertPlaceToLonLatPt(self):
operationName = 'ConvertPlaceToLonLatPt'
request = self.getInputMessageInstance(operationName)
request._place = self._moduleDict[self._typeModuleName].ns1.Place_Def()
request._place._City = 'Oak Harbor'
request._place._State = 'Washington'
request._place._Country = 'United States'
response = self.RPC(operationName, request)
def test_ConvertLonLatPtToNearestPlace(self):
operationName = 'ConvertLonLatPtToNearestPlace'
request = self.getInputMessageInstance(operationName)
request._place = self._moduleDict[self._typeModuleName].ns1.Place_Def()
request._point = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._point._Lon = -122.643
request._point._Lat = 48.297
response = self.RPC(operationName, request)
def test_ConvertLonLatPtToUtmPt(self):
operationName = 'ConvertLonLatPtToUtmPt'
request = self.getInputMessageInstance(operationName)
request._point = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._point._Lon = -122.643
request._point._Lat = 48.297
response = self.RPC(operationName, request)
def test_ConvertUtmPtToLonLatPt(self):
operationName = 'ConvertUtmPtToLonLatPt'
request = self.getInputMessageInstance(operationName)
request._utm = self._moduleDict[self._typeModuleName].ns1.UtmPt_Def()
request._utm._X = 526703.512403
request._utm._Y = 5348595.96493
request._utm._Zone = 10
response = self.RPC(operationName, request)
def test_CountPlacesInRect(self):
operationName = 'CountPlacesInRect'
request = self.getInputMessageInstance(operationName)
request._upperleft = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._upperleft._Lon = -122.647
request._upperleft._Lat = 48.293
request._lowerright = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._lowerright._Lon = request._upperleft._Lon + 1.0
request._lowerright._Lat = request._upperleft._Lon - 1.0
request._ptype = "HillMountain"
response = self.RPC(operationName, request)
def test_GetAreaFromPt(self):
operationName = 'GetAreaFromPt'
request = self.getInputMessageInstance(operationName)
request._center = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._center._Lon = -122.647
request._center._Lat = 48.293
request._theme = 'Topo'
request._scale = "Scale2m"
request._displayPixWidth = 2
request._displayPixHeight = 2
response = self.RPC(operationName, request)
def test_GetAreaFromRect(self):
operationName = 'GetAreaFromRect'
request = self.getInputMessageInstance(operationName)
request._upperLeft = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._upperLeft._Lon = -122.647
request._upperLeft._Lat = 48.293
request._lowerRight = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._lowerRight._Lon = request._upperLeft._Lon + 1.0
request._lowerRight._Lat = request._upperLeft._Lat - 1.0
request._theme = 'Topo'
request._scale = "Scale2m"
response = self.RPC(operationName, request)
def test_GetAreaFromTileId(self):
operationName = 'GetAreaFromTileId'
request = self.getInputMessageInstance(operationName)
id = self._moduleDict[self._typeModuleName].ns1.TileId_Def()
id._Theme = 'Topo'
id._Scale = "Scale2m"
id._Scene = 8
id._X = 20
id._y = 20
request._id = id
request._displayPixWidth = 2
request._displayPixHeight = 2
response = self.RPC(operationName, request)
def test_GetLatLonMetrics(self):
operationName = 'GetLatLonMetrics'
request = self.getInputMessageInstance(operationName)
request._point = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._point._Lon = -122.647
request._point._Lat = 48.293
response = self.RPC(operationName, request)
# derived type (enum) problem
# skipping it for now
# derived type (enum) problem
# also inconsistent timeout problem for this call
def test_GetPlaceListInRect(self):
operationName = 'GetPlaceListInRect'
request = self.getInputMessageInstance(operationName)
request._upperleft = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._upperleft._Lon = -123.0
request._upperleft._Lat = 44.0
request._lowerright = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
# needs to be small, otherwise different items
# returned each time
request._lowerright._Lon = -122.8
request._lowerright._Lat = 43.8
request._ptype = "HillMountain"
request._MaxItems = 3
response = self.RPC(operationName, request)
def test_GetTheme(self):
operationName = 'GetTheme'
request = self.getInputMessageInstance(operationName)
request._theme = 'Topo'
response = self.RPC(operationName, request)
def test_GetTile(self):
operationName = 'GetTile'
request = self.getInputMessageInstance(operationName)
request._id = self._moduleDict[self._typeModuleName].ns1.TileId_Def()
request._id._Theme = 'Topo'
request._id._Scale = 'Scale2m'
request._id._Scene = 8
request._id._X = 20
request._id._Y = 20
response = self.RPC(operationName, request)
def test_GetTileMetaFromLonLatPt(self):
operationName = 'GetTileMetaFromLonLatPt'
request = self.getInputMessageInstance(operationName)
request._theme = 'Topo'
request._point = self._moduleDict[self._typeModuleName].ns1.LonLatPt_Def()
request._point._Lon = -122.64
request._point._Lat = 48.29
request._scale = "Scale4m"
response = self.RPC(operationName, request)
def test_GetTileMetaFromTileId(self):
operationName = 'GetTileMetaFromTileId'
request = self.getInputMessageInstance(operationName)
request._id = self._moduleDict[self._typeModuleName].ns1.TileId_Def()
request._id._Theme = 'Topo'
request._id._Scale = 'Scale2m'
request._id._Scene = 8
request._id._X = 20
request._id._Y = 20
response = self.RPC(operationName, request)
class TerraServiceTestFailures(ServiceTestCase):
name = "test_TerraService"
def test_ConvertPlaceToLonLatPt_x1(self):
"""
This test should fail
"""
operationName = 'ConvertPlaceToLonLatPt'
request = self.getInputMessageInstance(operationName)
request._place = self._moduleDict[self._typeModuleName].ns1.Place_Def()
request._place._City = 1
request._place._State = 'Washington'
request._place._Country = 'United States'
try:
response = self.RPC(operationName, request)
except Exception, msg:
exceptionString = str(msg)
if SERIALIZE_PATTERN.match(exceptionString):
pass
else:
raise
def test_GetPlaceFacts(self):
operationName = 'GetPlaceFacts'
request = self.getInputMessageInstance(operationName)
request._place = self._moduleDict[self._typeModuleName].ns1.Place_Def()
request._place._City = 'Seattle'
request._place._State = 'Washington'
request._place._Country = 'United States'
try:
response = self.RPC(operationName, request)
except EvaluateException, ex:
pass
def test_GetPlaceList(self):
operationName = 'GetPlaceList'
request = self.getInputMessageInstance(operationName)
request._placeName = 'New York'
request._MaxItems = 5
request._imagePresence = 0
try:
response = self.RPC(operationName, request)
except EvaluateException, ex:
pass
def makeTestSuite():
suite = ServiceTestSuite()
suite.addTest(unittest.makeSuite(TerraServiceTest, 'test_'))
suite.addTest(unittest.makeSuite(TerraServiceTestFailures, 'test_'))
return suite
if __name__ == "__main__" :
unittest.TestProgram(defaultTest="makeTestSuite")
|