Fixing PCA live tests and PCA conflicts
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/42c388bc Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/42c388bc Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/42c388bc Branch: refs/heads/stratos-4.1.x Commit: 42c388bc460e7825f57f8386a39aa4478a1e8e19 Parents: 0843304 Author: Akila Perera <[email protected]> Authored: Tue Sep 15 20:44:30 2015 +0530 Committer: Akila Perera <[email protected]> Committed: Tue Sep 15 20:44:40 2015 +0530 ---------------------------------------------------------------------- .../cartridge.agent/cartridge.agent/config.py | 15 +- .../extensions/py/ExtensionExecutor.py | 2 +- .../thrift/thrift/transport/TSSLSocket.py | 357 +++++++------- .../cartridge.agent/modules/util/log.py | 2 +- .../cartridge.agent/publisher.py | 2 +- pom.xml | 1 + .../distribution/src/main/assembly/bin.xml | 5 +- .../modules/integration/pom.xml | 200 +------- .../test/ADCMTAppTenantUserTest.java | 213 -------- .../test/ADCMTAppTest.java | 213 -------- .../python.cartridge.agent/test/ADCTest.java | 235 --------- .../test/AgentStartupTest.java | 154 ------ .../test/PythonAgentTestManager.java | 461 ----------------- .../src/test/resources/log4j.properties | 41 -- .../src/test/resources/pca-testing1.xml | 29 -- .../src/test/resources/pca-testing2.xml | 29 -- .../src/test/resources/pca-testing3.xml | 29 -- .../src/test/resources/pca-testing4.xml | 29 -- .../src/test/resources/suite-1/agent.conf | 45 -- .../src/test/resources/suite-1/jndi.properties | 22 - .../src/test/resources/suite-1/logging.ini | 52 -- .../resources/suite-1/payload/launch-params | 1 - .../src/test/resources/suite-2/agent.conf | 45 -- .../src/test/resources/suite-2/jndi.properties | 22 - .../src/test/resources/suite-2/logging.ini | 52 -- .../resources/suite-2/payload/launch-params | 1 - .../src/test/resources/suite-3/agent.conf | 45 -- .../src/test/resources/suite-3/jndi.properties | 22 - .../src/test/resources/suite-3/logging.ini | 52 -- .../resources/suite-3/payload/launch-params | 1 - .../src/test/resources/suite-4/agent.conf | 45 -- .../src/test/resources/suite-4/jndi.properties | 22 - .../src/test/resources/suite-4/logging.ini | 52 -- .../resources/suite-4/payload/launch-params | 1 - .../test-conf/integration-test.properties | 26 - .../modules/integration/test-common/pom.xml | 94 ++++ .../common/DataPublisherTestUtil.java | 54 ++ .../integration/common/ThriftTestServer.java | 215 ++++++++ .../integration/test-integration/pom.xml | 168 +++++++ .../tests/ADCMTAppTenantUserTestCase.java | 217 ++++++++ .../integration/tests/ADCMTAppTestCase.java | 218 ++++++++ .../agent/integration/tests/ADCTestCase.java | 239 +++++++++ .../integration/tests/AgentStartupTestCase.java | 157 ++++++ .../tests/PythonAgentIntegrationTest.java | 491 +++++++++++++++++++ .../ADCMTAppTenantUserTestCase/agent.conf | 45 ++ .../ADCMTAppTenantUserTestCase/logging.ini | 52 ++ .../payload/launch-params | 1 + .../test/resources/ADCMTAppTestCase/agent.conf | 45 ++ .../test/resources/ADCMTAppTestCase/logging.ini | 52 ++ .../ADCMTAppTestCase/payload/launch-params | 1 + .../src/test/resources/ADCTestCase/agent.conf | 45 ++ .../src/test/resources/ADCTestCase/logging.ini | 52 ++ .../resources/ADCTestCase/payload/launch-params | 1 + .../resources/AgentStartupTestCase/agent.conf | 45 ++ .../resources/AgentStartupTestCase/logging.ini | 52 ++ .../AgentStartupTestCase/payload/launch-params | 1 + .../test/resources/common/client-truststore.jks | Bin 0 -> 37935 bytes .../resources/common/data-bridge-config.xml | 75 +++ .../src/test/resources/common/jndi.properties | 22 + .../src/test/resources/common/log4j.properties | 41 ++ .../common/stratos-health-stream-def.json | 1 + .../resources/common/thrift-agent-config.xml | 64 +++ .../src/test/resources/common/wso2carbon.jks | Bin 0 -> 33260 bytes .../test-conf/integration-test.properties | 27 + .../src/test/resources/test-suite-all.xml | 36 ++ .../src/test/resources/test-suite-smoke.xml | 37 ++ 66 files changed, 2755 insertions(+), 2316 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/config.py ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/config.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/config.py index fdf3880..31da21f 100644 --- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/config.py +++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/config.py @@ -18,11 +18,12 @@ import ConfigParser import os +from yapsy.PluginManager import PluginManager + from modules.util.log import LogFactory from exception import ParameterNotFoundException import constants from plugins.contracts import ICartridgeAgentPlugin, IArtifactManagementPlugin, IHealthStatReaderPlugin -from yapsy.PluginManager import PluginManager class Config: @@ -134,18 +135,20 @@ class Config: :rtype: ConfigParser.SafeConfigParser() """ - conf_file_path = os.path.abspath(os.path.dirname(__file__)).split("modules")[0] + "/agent.conf" + conf_file_path = os.path.abspath(os.path.dirname(__file__)) + "/agent.conf" Config.log.debug("Config file path : %r" % conf_file_path) properties = ConfigParser.SafeConfigParser() properties.read(conf_file_path) # set calculated values - param_file = os.path.abspath(os.path.dirname(__file__)).split("modules")[0] + "/payload/launch-params" + param_file = os.path.abspath(os.path.dirname(__file__)) + "/payload/launch-params" + Config.log.debug("param_file: %r" % param_file) properties.set("agent", constants.PARAM_FILE_PATH, param_file) - plugins_dir = os.path.abspath(os.path.dirname(__file__)).split("modules")[0] + "/plugins" + plugins_dir = os.path.abspath(os.path.dirname(__file__)) + "/plugins" + Config.log.debug("plugins_dir: %r" % plugins_dir) properties.set("agent", constants.PLUGINS_DIR, plugins_dir) - plugins_dir = os.path.abspath(os.path.dirname(__file__)).split("modules")[0] + "/extensions/py" + plugins_dir = os.path.abspath(os.path.dirname(__file__)) + "/extensions/py" properties.set("agent", constants.EXTENSIONS_DIR, plugins_dir) return properties @@ -264,7 +267,7 @@ class Config: Config.application_id = Config.read_property(constants.APPLICATION_ID) Config.service_name = Config.read_property(constants.SERVICE_NAME) Config.cluster_id = Config.read_property(constants.CLUSTER_ID) - Config.ports = Config.read_property(constants.PORTS).replace("'","").split("|") + Config.ports = Config.read_property(constants.PORTS).replace("'", "").split("|") Config.is_multiTenant = Config.read_property(constants.MULTITENANT) Config.tenant_id = Config.read_property(constants.TENANT_ID) http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/extensions/py/ExtensionExecutor.py ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/extensions/py/ExtensionExecutor.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/extensions/py/ExtensionExecutor.py index 9c958da..655afc4 100644 --- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/extensions/py/ExtensionExecutor.py +++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/extensions/py/ExtensionExecutor.py @@ -51,7 +51,7 @@ class ExtensionExecutor(ICartridgeAgentPlugin): """ log = LogFactory().get_log(__name__) - working_dir = os.path.abspath(os.path.dirname(__file__)).split("modules")[0] + working_dir = os.path.abspath(os.path.dirname(__file__)) command = working_dir[:-2] + "bash/" + bash_file current_env_vars = os.environ.copy() extension_values.update(current_env_vars) http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/thrift/transport/TSSLSocket.py ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/thrift/transport/TSSLSocket.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/thrift/transport/TSSLSocket.py index df35be4..9bb9771 100644 --- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/thrift/transport/TSSLSocket.py +++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/thrift/transport/TSSLSocket.py @@ -26,189 +26,192 @@ from TTransport import TTransportException class TSSLSocket(TSocket.TSocket): - """ - SSL implementation of client-side TSocket - - This class creates outbound sockets wrapped using the - python standard ssl module for encrypted connections. - - The protocol used is set using the class variable - SSL_VERSION, which must be one of ssl.PROTOCOL_* and - defaults to ssl.PROTOCOL_TLSv1 for greatest security. - """ - SSL_VERSION = ssl.PROTOCOL_TLSv1 - - def __init__(self, - host='localhost', - port=9090, - validate=True, - ca_certs=None, - keyfile=None, - certfile=None, - unix_socket=None): - """Create SSL TSocket - - @param validate: Set to False to disable SSL certificate validation - @type validate: bool - @param ca_certs: Filename to the Certificate Authority pem file, possibly a - file downloaded from: http://curl.haxx.se/ca/cacert.pem This is passed to - the ssl_wrap function as the 'ca_certs' parameter. - @type ca_certs: str - @param keyfile: The private key - @type keyfile: str - @param certfile: The cert file - @type certfile: str - - Raises an IOError exception if validate is True and the ca_certs file is - None, not present or unreadable. """ - self.validate = validate - self.is_valid = False - self.peercert = None - if not validate: - self.cert_reqs = ssl.CERT_NONE - else: - self.cert_reqs = ssl.CERT_REQUIRED - self.ca_certs = ca_certs - self.keyfile = keyfile - self.certfile = certfile - if validate: - if ca_certs is None or not os.access(ca_certs, os.R_OK): - raise IOError('Certificate Authority ca_certs file "%s" ' - 'is not readable, cannot validate SSL ' - 'certificates.' % (ca_certs)) - TSocket.TSocket.__init__(self, host, port, unix_socket) - - def open(self): - try: - res0 = self._resolveAddr() - for res in res0: - sock_family, sock_type = res[0:2] - ip_port = res[4] - plain_sock = socket.socket(sock_family, sock_type) - self.handle = ssl.wrap_socket(plain_sock, - ssl_version=self.SSL_VERSION, - do_handshake_on_connect=True, - ca_certs=self.ca_certs, - keyfile=self.keyfile, - certfile=self.certfile, - cert_reqs=self.cert_reqs) - self.handle.settimeout(self._timeout) + SSL implementation of client-side TSocket + + This class creates outbound sockets wrapped using the + python standard ssl module for encrypted connections. + + The protocol used is set using the class variable + SSL_VERSION, which must be one of ssl.PROTOCOL_* and + defaults to ssl.PROTOCOL_TLSv1 for greatest security. + """ + SSL_VERSION = ssl.PROTOCOL_TLSv1 + CIPHERS = "DEFAULT:!ECDH" + + def __init__(self, + host='localhost', + port=9090, + validate=True, + ca_certs=None, + keyfile=None, + certfile=None, + unix_socket=None): + """Create SSL TSocket + + @param validate: Set to False to disable SSL certificate validation + @type validate: bool + @param ca_certs: Filename to the Certificate Authority pem file, possibly a + file downloaded from: http://curl.haxx.se/ca/cacert.pem This is passed to + the ssl_wrap function as the 'ca_certs' parameter. + @type ca_certs: str + @param keyfile: The private key + @type keyfile: str + @param certfile: The cert file + @type certfile: str + + Raises an IOError exception if validate is True and the ca_certs file is + None, not present or unreadable. + """ + TSocket.TSocket.__init__(self, host, port, unix_socket) + + self.validate = validate + self.is_valid = False + self.peercert = None + if not validate: + self.cert_reqs = ssl.CERT_NONE + else: + self.cert_reqs = ssl.CERT_REQUIRED + self.ca_certs = ca_certs + self.keyfile = keyfile + self.certfile = certfile + if validate: + if ca_certs is None or not os.access(ca_certs, os.R_OK): + raise IOError('Certificate Authority ca_certs file "%s" ' + 'is not readable, cannot validate SSL ' + 'certificates.' % (ca_certs)) + + def open(self): try: - self.handle.connect(ip_port) + res0 = self._resolveAddr() + for res in res0: + sock_family, sock_type = res[0:2] + ip_port = res[4] + plain_sock = socket.socket(sock_family, sock_type) + self.handle = ssl.wrap_socket(plain_sock, + ssl_version=TSSLSocket.SSL_VERSION, + do_handshake_on_connect=True, + ca_certs=self.ca_certs, + keyfile=self.keyfile, + certfile=self.certfile, + cert_reqs=self.cert_reqs, + ciphers=TSSLSocket.CIPHERS) + self.handle.settimeout(self._timeout) + try: + self.handle.connect(ip_port) + except socket.error, e: + if res is not res0[-1]: + continue + else: + raise e + break except socket.error, e: - if res is not res0[-1]: - continue - else: - raise e - break - except socket.error, e: - if self._unix_socket: - message = 'Could not connect to secure socket %s: %s' \ - % (self._unix_socket, e) - else: - message = 'Could not connect to %s:%d: %s' % (self.host, self.port, e) - raise TTransportException(type=TTransportException.NOT_OPEN, - message=message) - if self.validate: - self._validate_cert() - - def _validate_cert(self): - """internal method to validate the peer's SSL certificate, and to check the - commonName of the certificate to ensure it matches the hostname we - used to make this connection. Does not support subjectAltName records - in certificates. - - raises TTransportException if the certificate fails validation. - """ - cert = self.handle.getpeercert() - self.peercert = cert - if 'subject' not in cert: - raise TTransportException( - type=TTransportException.NOT_OPEN, - message='No SSL certificate found from %s:%s' % (self.host, self.port)) - fields = cert['subject'] - for field in fields: - # ensure structure we get back is what we expect - if not isinstance(field, tuple): - continue - cert_pair = field[0] - if len(cert_pair) < 2: - continue - cert_key, cert_value = cert_pair[0:2] - if cert_key != 'commonName': - continue - certhost = cert_value - # this check should be performed by some sort of Access Manager - if certhost == self.host: - # success, cert commonName matches desired hostname - self.is_valid = True - return - else: + if self._unix_socket: + message = 'Could not connect to secure socket %s: %s' \ + % (self._unix_socket, e) + else: + message = 'Could not connect to %s:%d: %s' % (self.host, self.port, e) + raise TTransportException(type=TTransportException.NOT_OPEN, + message=message) + if self.validate: + self._validate_cert() + + def _validate_cert(self): + """internal method to validate the peer's SSL certificate, and to check the + commonName of the certificate to ensure it matches the hostname we + used to make this connection. Does not support subjectAltName records + in certificates. + + raises TTransportException if the certificate fails validation. + """ + cert = self.handle.getpeercert() + self.peercert = cert + if 'subject' not in cert: + raise TTransportException( + type=TTransportException.NOT_OPEN, + message='No SSL certificate found from %s:%s' % (self.host, self.port)) + fields = cert['subject'] + for field in fields: + # ensure structure we get back is what we expect + if not isinstance(field, tuple): + continue + cert_pair = field[0] + if len(cert_pair) < 2: + continue + cert_key, cert_value = cert_pair[0:2] + if cert_key != 'commonName': + continue + certhost = cert_value + # this check should be performed by some sort of Access Manager + if certhost == self.host: + # success, cert commonName matches desired hostname + self.is_valid = True + return + else: + raise TTransportException( + type=TTransportException.UNKNOWN, + message='Hostname we connected to "%s" doesn\'t match certificate ' + 'provided commonName "%s"' % (self.host, certhost)) raise TTransportException( - type=TTransportException.UNKNOWN, - message='Hostname we connected to "%s" doesn\'t match certificate ' - 'provided commonName "%s"' % (self.host, certhost)) - raise TTransportException( - type=TTransportException.UNKNOWN, - message='Could not validate SSL certificate from ' - 'host "%s". Cert=%s' % (self.host, cert)) + type=TTransportException.UNKNOWN, + message='Could not validate SSL certificate from ' + 'host "%s". Cert=%s' % (self.host, cert)) class TSSLServerSocket(TSocket.TServerSocket): - """SSL implementation of TServerSocket - - This uses the ssl module's wrap_socket() method to provide SSL - negotiated encryption. - """ - SSL_VERSION = ssl.PROTOCOL_TLSv1 - - def __init__(self, - host=None, - port=9090, - certfile='cert.pem', - unix_socket=None): - """Initialize a TSSLServerSocket - - @param certfile: filename of the server certificate, defaults to cert.pem - @type certfile: str - @param host: The hostname or IP to bind the listen socket to, - i.e. 'localhost' for only allowing local network connections. - Pass None to bind to all interfaces. - @type host: str - @param port: The port to listen on for inbound connections. - @type port: int - """ - self.setCertfile(certfile) - TSocket.TServerSocket.__init__(self, host, port) - - def setCertfile(self, certfile): - """Set or change the server certificate file used to wrap new connections. + """SSL implementation of TServerSocket - @param certfile: The filename of the server certificate, - i.e. '/etc/certs/server.pem' - @type certfile: str - - Raises an IOError exception if the certfile is not present or unreadable. + This uses the ssl module's wrap_socket() method to provide SSL + negotiated encryption. """ - if not os.access(certfile, os.R_OK): - raise IOError('No such certfile found: %s' % (certfile)) - self.certfile = certfile - - def accept(self): - plain_client, addr = self.handle.accept() - try: - client = ssl.wrap_socket(plain_client, certfile=self.certfile, - server_side=True, ssl_version=self.SSL_VERSION) - except ssl.SSLError, ssl_exc: - # failed handshake/ssl wrap, close socket to client - plain_client.close() - # raise ssl_exc - # We can't raise the exception, because it kills most TServer derived - # serve() methods. - # Instead, return None, and let the TServer instance deal with it in - # other exception handling. (but TSimpleServer dies anyway) - return None - result = TSocket.TSocket() - result.setHandle(client) - return result + SSL_VERSION = ssl.PROTOCOL_TLSv1 + + def __init__(self, + host=None, + port=9090, + certfile='cert.pem', + unix_socket=None): + """Initialize a TSSLServerSocket + + @param certfile: filename of the server certificate, defaults to cert.pem + @type certfile: str + @param host: The hostname or IP to bind the listen socket to, + i.e. 'localhost' for only allowing local network connections. + Pass None to bind to all interfaces. + @type host: str + @param port: The port to listen on for inbound connections. + @type port: int + """ + self.setCertfile(certfile) + TSocket.TServerSocket.__init__(self, host, port) + + def setCertfile(self, certfile): + """Set or change the server certificate file used to wrap new connections. + + @param certfile: The filename of the server certificate, + i.e. '/etc/certs/server.pem' + @type certfile: str + + Raises an IOError exception if the certfile is not present or unreadable. + """ + if not os.access(certfile, os.R_OK): + raise IOError('No such certfile found: %s' % (certfile)) + self.certfile = certfile + + def accept(self): + plain_client, addr = self.handle.accept() + try: + client = ssl.wrap_socket(plain_client, certfile=self.certfile, + server_side=True, ssl_version=self.SSL_VERSION) + except ssl.SSLError, ssl_exc: + # failed handshake/ssl wrap, close socket to client + plain_client.close() + # raise ssl_exc + # We can't raise the exception, because it kills most TServer derived + # serve() methods. + # Instead, return None, and let the TServer instance deal with it in + # other exception handling. (but TSimpleServer dies anyway) + return None + result = TSocket.TSocket() + result.setHandle(client) + return result http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/log.py ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/log.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/log.py index 9bad214..6a0804e 100644 --- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/log.py +++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/log.py @@ -27,7 +27,7 @@ class LogFactory(object): class __LogFactory: def __init__(self): self.logs = {} - logging_conf = os.path.abspath(os.path.dirname(__file__)).split("modules")[0] + "logging.ini" + logging_conf = os.path.abspath(os.path.dirname(__file__)) + "/../../logging.ini" logging.config.fileConfig(logging_conf) def get_log(self, name): http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/publisher.py ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/publisher.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/publisher.py index d4365e8..00b5fba 100644 --- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/publisher.py +++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/publisher.py @@ -104,7 +104,7 @@ def publish_instance_activated_event(health_stat_plugin): log.info("Instance activated event published") log.info("Starting health statistics notifier") - health_stat_publishing_enabled = Config.read_property(constants.CEP_PUBLISHER_ENABLED, False) + health_stat_publishing_enabled = Config.read_property(constants.CEP_PUBLISHER_ENABLED, True) if health_stat_publishing_enabled: interval_default = 15 # seconds http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 6fe098c..4f937bd 100644 --- a/pom.xml +++ b/pom.xml @@ -774,6 +774,7 @@ <carbon.deployment.version>4.2.3</carbon.deployment.version> <carbon.automation.version>4.4.2</carbon.automation.version> <carbon.automationutils.version>4.4.2</carbon.automationutils.version> + <carbon.analytics.common.version>5.0.0</carbon.analytics.common.version> <carbon.ui.stratos.version>4.2.0-stratosv2</carbon.ui.stratos.version> <carbon.p2.plugin.version>1.5.4</carbon.p2.plugin.version> <carbon.platform.patch.version.4.2.1>4.2.1</carbon.platform.patch.version.4.2.1> http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/products/python-cartridge-agent/modules/distribution/src/main/assembly/bin.xml ---------------------------------------------------------------------- diff --git a/products/python-cartridge-agent/modules/distribution/src/main/assembly/bin.xml b/products/python-cartridge-agent/modules/distribution/src/main/assembly/bin.xml index fa8874c..aa49e62 100644 --- a/products/python-cartridge-agent/modules/distribution/src/main/assembly/bin.xml +++ b/products/python-cartridge-agent/modules/distribution/src/main/assembly/bin.xml @@ -25,12 +25,15 @@ <fileSets> <fileSet> <directory> - ${project.basedir}/../../../components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent + ${project.basedir}/../../../../components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent </directory> <outputDirectory>.</outputDirectory> <includes> <include>**/*</include> </includes> + <excludes> + <exclude>**/*.pyc</exclude> + </excludes> <fileMode>0755</fileMode> </fileSet> </fileSets> http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/products/python-cartridge-agent/modules/integration/pom.xml ---------------------------------------------------------------------- diff --git a/products/python-cartridge-agent/modules/integration/pom.xml b/products/python-cartridge-agent/modules/integration/pom.xml index aa9efb4..aa2c94d 100755 --- a/products/python-cartridge-agent/modules/integration/pom.xml +++ b/products/python-cartridge-agent/modules/integration/pom.xml @@ -1,3 +1,4 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> <!-- ~ Licensed to the Apache Software Foundation (ASF) under one ~ or more contributor license agreements. See the NOTICE file @@ -7,7 +8,7 @@ ~ "License"); you may not use this file except in compliance ~ with the License. You may obtain a copy of the License at ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, ~ software distributed under the License is distributed on an @@ -16,7 +17,6 @@ ~ specific language governing permissions and limitations ~ under the License. --> - <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -27,193 +27,13 @@ <relativePath>../../pom.xml</relativePath> </parent> - <artifactId>python-agent-integration</artifactId> - <packaging>jar</packaging> - <name>Python Cartridge Agent - Integration Tests</name> - - <build> - <resources> - <resource> - <directory>src/test/resources/test-conf</directory> - <filtering>true</filtering> - </resource> - </resources> - </build> - - <profiles> - <profile> - <id>default</id> - <activation> - <activeByDefault>true</activeByDefault> - </activation> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <configuration> - <excludes> - <exclude>**/*</exclude> - </excludes> - </configuration> - </plugin> - </plugins> - </build> - </profile> - <profile> - <id>live</id> - <build> - <resources> - <resource> - <directory>src/test/resources/test-conf</directory> - <filtering>true</filtering> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <configuration> - <excludes> - <exclude>**/*</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-test</id> - <goals> - <goal>test</goal> - </goals> - <inherited>false</inherited> - <configuration> - <suiteXmlFiles> - <suiteXmlFile>src/test/resources/pca-testing1.xml</suiteXmlFile> - </suiteXmlFiles> - <workingDirectory>${basedir}/target</workingDirectory> - </configuration> - </execution> - <execution> - <id>adc-test</id> - <goals> - <goal>test</goal> - </goals> - <inherited>false</inherited> - <configuration> - <suiteXmlFiles> - <suiteXmlFile>src/test/resources/pca-testing2.xml</suiteXmlFile> - </suiteXmlFiles> - <workingDirectory>${basedir}/target</workingDirectory> - </configuration> - </execution> - <execution> - <id>adc-mt-test</id> - <goals> - <goal>test</goal> - </goals> - <inherited>false</inherited> - <configuration> - <suiteXmlFiles> - <suiteXmlFile>src/test/resources/pca-testing3.xml</suiteXmlFile> - </suiteXmlFiles> - <workingDirectory>${basedir}/target</workingDirectory> - </configuration> - </execution> - <execution> - <id>adc-mt-tenant-user-test</id> - <goals> - <goal>test</goal> - </goals> - <inherited>false</inherited> - <configuration> - <suiteXmlFiles> - <suiteXmlFile>src/test/resources/pca-testing4.xml</suiteXmlFile> - </suiteXmlFiles> - <workingDirectory>${basedir}/target</workingDirectory> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-dependency-plugin</artifactId> - </plugin> - </plugins> - </build> - </profile> - </profiles> + <artifactId>python-cartridge-agent-integration</artifactId> + <packaging>pom</packaging> + <name>Apache Stratos - Python Cartridge Agent Integration Aggregator</name> + <description>Apache Stratos Python Cartridge Agent Integration Aggregator</description> - <dependencies> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-exec</artifactId> - <version>1.0.1</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>org.apache.stratos.common</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.testng</groupId> - <artifactId>testng</artifactId> - <version>6.1.1</version> - </dependency> - <dependency> - <groupId>org.apache.axis2.wso2</groupId> - <artifactId>axis2-client</artifactId> - <version>${axis2.wso2.version}</version> - </dependency> - <dependency> - <groupId>org.apache.httpcomponents.wso2</groupId> - <artifactId>httpcore</artifactId> - <version>4.3.0.wso2v1</version> - </dependency> - <dependency> - <groupId>org.apache.httpcomponents.wso2</groupId> - <artifactId>httpclient</artifactId> - <version>4.2.5.wso2v1</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>org.apache.stratos.mock.iaas.client</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.wso2.andes.wso2</groupId> - <artifactId>andes-client</artifactId> - <version>0.13.wso2v8</version> - </dependency> - <dependency> - <groupId>org.apache.activemq</groupId> - <artifactId>activemq-all</artifactId> - <version>5.10.0</version> - </dependency> - <dependency> - <groupId>org.apache.activemq</groupId> - <artifactId>activemq-mqtt</artifactId> - <version>5.10.0</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>org.apache.stratos.messaging</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.thrift</groupId> - <artifactId>libthrift</artifactId> - <version>0.9.2</version> - </dependency> - </dependencies> + <modules> + <module>test-common</module> + <module>test-integration</module> + </modules> </project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTenantUserTest.java ---------------------------------------------------------------------- diff --git a/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTenantUserTest.java b/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTenantUserTest.java deleted file mode 100644 index a604f55..0000000 --- a/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTenantUserTest.java +++ /dev/null @@ -1,213 +0,0 @@ -package org.apache.stratos.python.cartridge.agent.test;/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.common.domain.LoadBalancingIPType; -import org.apache.stratos.messaging.domain.topology.*; -import org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent; -import org.apache.stratos.messaging.event.topology.CompleteTopologyEvent; -import org.apache.stratos.messaging.event.topology.MemberInitializedEvent; -import org.testng.annotations.AfterSuite; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Test; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import static junit.framework.Assert.assertTrue; - -public class ADCMTAppTenantUserTest extends PythonAgentTestManager { - private static final Log log = LogFactory.getLog(ADCMTAppTenantUserTest.class); - private static final int ADC_TIMEOUT = 180000; - private static final String RESOURCES_PATH = "/suite-4"; - private static final String APPLICATION_PATH = "/tmp/pca-test-suite-4"; - private static final String CLUSTER_ID = "tomcat.domain"; - private static final String DEPLOYMENT_POLICY_NAME = "deployment-policy-4"; - private static final String AUTOSCALING_POLICY_NAME = "autoscaling-policy-4"; - private static final String APP_ID = "application-4"; - private static final String MEMBER_ID = "tomcat.member-1"; - private static final String CLUSTER_INSTANCE_ID = "cluster-1-instance-1"; - private static final String NETWORK_PARTITION_ID = "network-partition-1"; - private static final String PARTITION_ID = "partition-1"; - private static final String TENANT_ID = "4"; - private static final String SERVICE_NAME = "tomcat-mt"; - - private boolean hasADCTestCompleted = false; - - @BeforeSuite - public void setupADCMTAppTest() { - // Set jndi.properties.dir system property for initializing event publishers and receivers - System.setProperty("jndi.properties.dir", getResourcesPath(RESOURCES_PATH)); - - // start Python agent with configurations provided in resource path - setup(RESOURCES_PATH); - - // Simulate server socket - startServerSocket(8080); - } - - /** - * TearDown method for test method testPythonCartridgeAgent - */ - @AfterSuite - public void tearDownADCMTAppTest() { - // TODO: app path is duplicated in Java test and payload - tearDown(APPLICATION_PATH); - } - - @Test(timeOut = ADC_TIMEOUT) - public void testADCForMTApps() { - startCommunicatorThread(); - assertAgentActivation(); - Thread adcTestThread = new Thread(new Runnable() { - @Override - public void run() { - log.info("Running ADC MT Test thread..."); - // Send artifact updated event - publishEvent(getArtifactUpdatedEventForPublicRepo()); - log.info("Publishing artifact updated event for repo: " + - getArtifactUpdatedEventForPublicRepo().getRepoURL()); - - List<String> outputLines = new ArrayList<String>(); - while (!outputStream.isClosed() && !hasADCTestCompleted) { - List<String> newLines = getNewLines(outputLines, outputStream.toString()); - if (newLines.size() > 0) { - for (String line : newLines) { - if (line.contains("Git clone executed")) { - log.info("Agent has completed git clone. Asserting the operation..."); - assertRepoClone(getArtifactUpdatedEventForPublicRepo()); - hasADCTestCompleted = true; - } - } - } - sleep(1000); - } - } - }); - adcTestThread.start(); - - while (!hasADCTestCompleted) { - // wait until the instance activated event is received. - sleep(1000); - } - } - - private void assertAgentActivation() { - Thread startupTestThread = new Thread(new Runnable() { - @Override - public void run() { - while (!eventReceiverInitiated) { - sleep(1000); - } - List<String> outputLines = new ArrayList<String>(); - while (!outputStream.isClosed()) { - List<String> newLines = getNewLines(outputLines, outputStream.toString()); - if (newLines.size() > 0) { - for (String line : newLines) { - if (line.contains("Subscribed to 'topology/#'")) { - sleep(2000); - // Send complete topology event - log.info("Publishing complete topology event..."); - Topology topology = createTestTopology(); - CompleteTopologyEvent completeTopologyEvent = new CompleteTopologyEvent(topology); - publishEvent(completeTopologyEvent); - log.info("Complete topology event published"); - - // Publish member initialized event - log.info("Publishing member initialized event..."); - MemberInitializedEvent memberInitializedEvent = new MemberInitializedEvent( - SERVICE_NAME, CLUSTER_ID, CLUSTER_INSTANCE_ID, MEMBER_ID, NETWORK_PARTITION_ID, - PARTITION_ID - ); - publishEvent(memberInitializedEvent); - log.info("Member initialized event published"); - } - - // Send artifact updated event to activate the instance first - if (line.contains("Artifact repository found")) { - publishEvent(getArtifactUpdatedEventForPublicRepo()); - log.info("Artifact updated event published"); - } - log.info(line); - } - } - sleep(1000); - } - } - }); - startupTestThread.start(); - - while (!instanceStarted || !instanceActivated) { - // wait until the instance activated event is received. - // this will assert whether instance got activated within timeout period; no need for explicit assertions - sleep(2000); - } - } - - private ArtifactUpdatedEvent getArtifactUpdatedEventForPublicRepo() { - ArtifactUpdatedEvent publicRepoEvent = createTestArtifactUpdatedEvent(); - publicRepoEvent.setRepoURL("https://bitbucket.org/testapache2211/opentestrepo1.git"); - return publicRepoEvent; - } - - private void assertRepoClone(ArtifactUpdatedEvent artifactUpdatedEvent) { - File file = new File(APPLICATION_PATH + "/repository/tenants/4/test1.txt"); - assertTrue("Git clone failed for repo [url] " + artifactUpdatedEvent.getRepoURL(), - file.exists()); - } - - private static ArtifactUpdatedEvent createTestArtifactUpdatedEvent() { - ArtifactUpdatedEvent artifactUpdatedEvent = new ArtifactUpdatedEvent(); - artifactUpdatedEvent.setClusterId(CLUSTER_ID); - artifactUpdatedEvent.setTenantId(TENANT_ID); - return artifactUpdatedEvent; - } - - /** - * Create test topology - * - * @return - */ - private Topology createTestTopology() { - Topology topology = new Topology(); - Service service = new Service(SERVICE_NAME, ServiceType.SingleTenant); - topology.addService(service); - - Cluster cluster = new Cluster(service.getServiceName(), CLUSTER_ID, DEPLOYMENT_POLICY_NAME, - AUTOSCALING_POLICY_NAME, APP_ID); - service.addCluster(cluster); - - Member member = new Member(service.getServiceName(), cluster.getClusterId(), MEMBER_ID, - CLUSTER_INSTANCE_ID, NETWORK_PARTITION_ID, PARTITION_ID, LoadBalancingIPType.Private, - System.currentTimeMillis()); - - member.setDefaultPrivateIP("10.0.0.1"); - member.setDefaultPublicIP("20.0.0.1"); - Properties properties = new Properties(); - properties.setProperty("prop1", "value1"); - member.setProperties(properties); - member.setStatus(MemberStatus.Created); - cluster.addMember(member); - - return topology; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java ---------------------------------------------------------------------- diff --git a/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java b/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java deleted file mode 100644 index 2a4c8b5..0000000 --- a/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java +++ /dev/null @@ -1,213 +0,0 @@ -package org.apache.stratos.python.cartridge.agent.test;/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.common.domain.LoadBalancingIPType; -import org.apache.stratos.messaging.domain.topology.*; -import org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent; -import org.apache.stratos.messaging.event.topology.CompleteTopologyEvent; -import org.apache.stratos.messaging.event.topology.MemberInitializedEvent; -import org.testng.annotations.AfterSuite; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Test; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import static junit.framework.Assert.assertTrue; - -public class ADCMTAppTest extends PythonAgentTestManager { - private static final Log log = LogFactory.getLog(ADCMTAppTest.class); - private static final int ADC_TIMEOUT = 180000; - private static final String RESOURCES_PATH = "/suite-3"; - private static final String APPLICATION_PATH = "/tmp/pca-test-suite-3"; - private static final String CLUSTER_ID = "tomcat.domain"; - private static final String DEPLOYMENT_POLICY_NAME = "deployment-policy-3"; - private static final String AUTOSCALING_POLICY_NAME = "autoscaling-policy-3"; - private static final String APP_ID = "application-3"; - private static final String MEMBER_ID = "tomcat.member-1"; - private static final String CLUSTER_INSTANCE_ID = "cluster-1-instance-1"; - private static final String NETWORK_PARTITION_ID = "network-partition-1"; - private static final String PARTITION_ID = "partition-1"; - private static final String TENANT_ID = "-1234"; - private static final String SERVICE_NAME = "tomcat-mt"; - - private boolean hasADCTestCompleted = false; - - @BeforeSuite - public void setupADCMTAppTest() { - // Set jndi.properties.dir system property for initializing event publishers and receivers - System.setProperty("jndi.properties.dir", getResourcesPath(RESOURCES_PATH)); - - // start Python agent with configurations provided in resource path - setup(RESOURCES_PATH); - - // Simulate server socket - startServerSocket(8080); - } - - /** - * TearDown method for test method testPythonCartridgeAgent - */ - @AfterSuite - public void tearDownADCMTAppTest() { - // TODO: app path is duplicated in Java test and payload - tearDown(APPLICATION_PATH); - } - - @Test(timeOut = ADC_TIMEOUT) - public void testADCForMTApps() { - startCommunicatorThread(); - assertAgentActivation(); - Thread adcTestThread = new Thread(new Runnable() { - @Override - public void run() { - log.info("Running ADC MT Test thread..."); - // Send artifact updated event - publishEvent(getArtifactUpdatedEventForPublicRepo()); - log.info("Publishing artifact updated event for repo: " + - getArtifactUpdatedEventForPublicRepo().getRepoURL()); - - List<String> outputLines = new ArrayList<String>(); - while (!outputStream.isClosed() && !hasADCTestCompleted) { - List<String> newLines = getNewLines(outputLines, outputStream.toString()); - if (newLines.size() > 0) { - for (String line : newLines) { - if (line.contains("Git clone executed")) { - log.info("Agent has completed git clone. Asserting the operation..."); - assertRepoClone(getArtifactUpdatedEventForPublicRepo()); - hasADCTestCompleted = true; - } - } - } - sleep(1000); - } - } - }); - adcTestThread.start(); - - while (!hasADCTestCompleted) { - // wait until the instance activated event is received. - sleep(1000); - } - } - - private void assertAgentActivation() { - Thread startupTestThread = new Thread(new Runnable() { - @Override - public void run() { - while (!eventReceiverInitiated) { - sleep(1000); - } - List<String> outputLines = new ArrayList<String>(); - while (!outputStream.isClosed()) { - List<String> newLines = getNewLines(outputLines, outputStream.toString()); - if (newLines.size() > 0) { - for (String line : newLines) { - if (line.contains("Subscribed to 'topology/#'")) { - sleep(2000); - // Send complete topology event - log.info("Publishing complete topology event..."); - Topology topology = createTestTopology(); - CompleteTopologyEvent completeTopologyEvent = new CompleteTopologyEvent(topology); - publishEvent(completeTopologyEvent); - log.info("Complete topology event published"); - - // Publish member initialized event - log.info("Publishing member initialized event..."); - MemberInitializedEvent memberInitializedEvent = new MemberInitializedEvent( - SERVICE_NAME, CLUSTER_ID, CLUSTER_INSTANCE_ID, MEMBER_ID, NETWORK_PARTITION_ID, - PARTITION_ID - ); - publishEvent(memberInitializedEvent); - log.info("Member initialized event published"); - } - - // Send artifact updated event to activate the instance first - if (line.contains("Artifact repository found")) { - publishEvent(getArtifactUpdatedEventForPublicRepo()); - log.info("Artifact updated event published"); - } - log.info(line); - } - } - sleep(1000); - } - } - }); - startupTestThread.start(); - - while (!instanceStarted || !instanceActivated) { - // wait until the instance activated event is received. - // this will assert whether instance got activated within timeout period; no need for explicit assertions - sleep(2000); - } - } - - private ArtifactUpdatedEvent getArtifactUpdatedEventForPublicRepo() { - ArtifactUpdatedEvent publicRepoEvent = createTestArtifactUpdatedEvent(); - publicRepoEvent.setRepoURL("https://bitbucket.org/testapache2211/opentestrepo1.git"); - return publicRepoEvent; - } - - private void assertRepoClone(ArtifactUpdatedEvent artifactUpdatedEvent) { - File file = new File(APPLICATION_PATH + "/repository/deployment/server/test1.txt"); - assertTrue("Git clone failed for repo [url] " + artifactUpdatedEvent.getRepoURL(), - file.exists()); - } - - private static ArtifactUpdatedEvent createTestArtifactUpdatedEvent() { - ArtifactUpdatedEvent artifactUpdatedEvent = new ArtifactUpdatedEvent(); - artifactUpdatedEvent.setClusterId(CLUSTER_ID); - artifactUpdatedEvent.setTenantId(TENANT_ID); - return artifactUpdatedEvent; - } - - /** - * Create test topology - * - * @return - */ - private Topology createTestTopology() { - Topology topology = new Topology(); - Service service = new Service(SERVICE_NAME, ServiceType.SingleTenant); - topology.addService(service); - - Cluster cluster = new Cluster(service.getServiceName(), CLUSTER_ID, DEPLOYMENT_POLICY_NAME, - AUTOSCALING_POLICY_NAME, APP_ID); - service.addCluster(cluster); - - Member member = new Member(service.getServiceName(), cluster.getClusterId(), MEMBER_ID, - CLUSTER_INSTANCE_ID, NETWORK_PARTITION_ID, PARTITION_ID, LoadBalancingIPType.Private, - System.currentTimeMillis()); - - member.setDefaultPrivateIP("10.0.0.1"); - member.setDefaultPublicIP("20.0.0.1"); - Properties properties = new Properties(); - properties.setProperty("prop1", "value1"); - member.setProperties(properties); - member.setStatus(MemberStatus.Created); - cluster.addMember(member); - - return topology; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java ---------------------------------------------------------------------- diff --git a/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java b/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java deleted file mode 100755 index de5be67..0000000 --- a/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java +++ /dev/null @@ -1,235 +0,0 @@ -package org.apache.stratos.python.cartridge.agent.test;/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.common.domain.LoadBalancingIPType; -import org.apache.stratos.messaging.domain.topology.*; -import org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent; -import org.apache.stratos.messaging.event.topology.CompleteTopologyEvent; -import org.apache.stratos.messaging.event.topology.MemberInitializedEvent; -import org.testng.annotations.AfterSuite; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Test; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import java.util.UUID; - -import static junit.framework.Assert.assertTrue; - -public class ADCTest extends PythonAgentTestManager { - private static final Log log = LogFactory.getLog(ADCTest.class); - private static final int ADC_TIMEOUT = 180000; - private static final String RESOURCES_PATH = "/suite-2"; - private static final String APPLICATION_PATH = "/tmp/pca-test-suite-2"; - private static final String CLUSTER_ID = "tomcat.domain"; - private static final String DEPLOYMENT_POLICY_NAME = "deployment-policy-2"; - private static final String AUTOSCALING_POLICY_NAME = "autoscaling-policy-2"; - private static final String APP_ID = "application-2"; - private static final String MEMBER_ID = "tomcat.member-1"; - private static final String CLUSTER_INSTANCE_ID = "cluster-1-instance-1"; - private static final String NETWORK_PARTITION_ID = "network-partition-1"; - private static final String PARTITION_ID = "partition-1"; - private static final String TENANT_ID = "-1234"; - private static final String SERVICE_NAME = "tomcat"; - - private boolean hasADCTestCompleted = false; - - @BeforeSuite - public void setupADCTest() { - // Set jndi.properties.dir system property for initializing event publishers and receivers - System.setProperty("jndi.properties.dir", getResourcesPath(RESOURCES_PATH)); - - // start Python agent with configurations provided in resource path - setup(RESOURCES_PATH); - - // Simulate server socket - startServerSocket(8080); - } - - /** - * TearDown method for test method testPythonCartridgeAgent - */ - @AfterSuite - public void tearDownADCTest() { - // TODO: app path is duplicated in Java test and payload - tearDown(APPLICATION_PATH); - } - - - @Test(timeOut = ADC_TIMEOUT) - public void testADC() { - startCommunicatorThread(); - assertAgentActivation(); - Thread adcTestThread = new Thread(new Runnable() { - @Override - public void run() { - log.info("Running ADC Test thread..."); - // Send artifact updated event - publishEvent(getArtifactUpdatedEventForPrivateRepo()); - log.info("Publishing artifact updated event for repo: " + - getArtifactUpdatedEventForPrivateRepo().getRepoURL()); - - List<String> outputLines = new ArrayList<String>(); - while (!outputStream.isClosed() && !hasADCTestCompleted) { - List<String> newLines = getNewLines(outputLines, outputStream.toString()); - if (newLines.size() > 0) { - for (String line : newLines) { - if (line.contains("Git clone executed")) { - log.info("Agent has completed git clone. Asserting the operation..."); - assertRepoClone(getArtifactUpdatedEventForPrivateRepo()); - File file = new File(APPLICATION_PATH + "/pca-live-" + UUID.randomUUID()); - try { - file.createNewFile(); - } - catch (IOException e) { - log.error("Could not create file", e); - } - } - if (line.contains("Pushed artifacts for tenant")) { - log.info("ADC Test completed"); - hasADCTestCompleted = true; - } - } - } - sleep(1000); - } - } - }); - adcTestThread.start(); - - while (!hasADCTestCompleted) { - // wait until the instance activated event is received. - sleep(1000); - } - } - - private void assertAgentActivation() { - Thread startupTestThread = new Thread(new Runnable() { - @Override - public void run() { - while (!eventReceiverInitiated) { - sleep(1000); - } - List<String> outputLines = new ArrayList<String>(); - while (!outputStream.isClosed()) { - List<String> newLines = getNewLines(outputLines, outputStream.toString()); - if (newLines.size() > 0) { - for (String line : newLines) { - if (line.contains("Subscribed to 'topology/#'")) { - sleep(2000); - // Send complete topology event - log.info("Publishing complete topology event..."); - Topology topology = createTestTopology(); - CompleteTopologyEvent completeTopologyEvent = new CompleteTopologyEvent(topology); - publishEvent(completeTopologyEvent); - log.info("Complete topology event published"); - - // Publish member initialized event - log.info("Publishing member initialized event..."); - MemberInitializedEvent memberInitializedEvent = new MemberInitializedEvent( - SERVICE_NAME, CLUSTER_ID, CLUSTER_INSTANCE_ID, MEMBER_ID, NETWORK_PARTITION_ID, - PARTITION_ID - ); - publishEvent(memberInitializedEvent); - log.info("Member initialized event published"); - } - - // Send artifact updated event to activate the instance first - if (line.contains("Artifact repository found")) { - publishEvent(getArtifactUpdatedEventForPrivateRepo()); - log.info("Artifact updated event published"); - } - log.info(line); - } - } - sleep(1000); - } - } - }); - startupTestThread.start(); - - while (!instanceStarted || !instanceActivated) { - // wait until the instance activated event is received. - // this will assert whether instance got activated within timeout period; no need for explicit assertions - sleep(2000); - } - } - - private void assertRepoClone(ArtifactUpdatedEvent artifactUpdatedEvent) { - File file = new File(APPLICATION_PATH + "/README.text"); - assertTrue("Git clone failed for repo [url] " + artifactUpdatedEvent.getRepoURL(), - file.exists()); - } - - - public static ArtifactUpdatedEvent getArtifactUpdatedEventForPublicRepo() { - ArtifactUpdatedEvent publicRepoEvent = createTestArtifactUpdatedEvent(); - publicRepoEvent.setRepoURL("https://bitbucket.org/testapache2211/opentestrepo1.git"); - return publicRepoEvent; - } - - public static ArtifactUpdatedEvent getArtifactUpdatedEventForPrivateRepo() { - ArtifactUpdatedEvent privateRepoEvent = createTestArtifactUpdatedEvent(); - privateRepoEvent.setRepoURL("https://bitbucket.org/testapache2211/testrepo.git"); - privateRepoEvent.setRepoUserName("testapache2211"); - privateRepoEvent.setRepoPassword("RExPDGa4GkPJj4kJDzSROQ=="); - return privateRepoEvent; - } - - private static ArtifactUpdatedEvent createTestArtifactUpdatedEvent() { - ArtifactUpdatedEvent artifactUpdatedEvent = new ArtifactUpdatedEvent(); - artifactUpdatedEvent.setClusterId(CLUSTER_ID); - artifactUpdatedEvent.setTenantId(TENANT_ID); - return artifactUpdatedEvent; - } - - /** - * Create test topology - * - * @return - */ - private Topology createTestTopology() { - Topology topology = new Topology(); - Service service = new Service(SERVICE_NAME, ServiceType.SingleTenant); - topology.addService(service); - - Cluster cluster = new Cluster(service.getServiceName(), CLUSTER_ID, DEPLOYMENT_POLICY_NAME, - AUTOSCALING_POLICY_NAME, APP_ID); - service.addCluster(cluster); - - Member member = new Member(service.getServiceName(), cluster.getClusterId(), MEMBER_ID, - CLUSTER_INSTANCE_ID, NETWORK_PARTITION_ID, PARTITION_ID, LoadBalancingIPType.Private, - System.currentTimeMillis()); - - member.setDefaultPrivateIP("10.0.0.1"); - member.setDefaultPublicIP("20.0.0.1"); - Properties properties = new Properties(); - properties.setProperty("prop1", "value1"); - member.setProperties(properties); - member.setStatus(MemberStatus.Created); - cluster.addMember(member); - - return topology; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/42c388bc/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java ---------------------------------------------------------------------- diff --git a/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java b/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java deleted file mode 100755 index c08ab5c..0000000 --- a/products/python-cartridge-agent/modules/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.stratos.python.cartridge.agent.test; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.common.domain.LoadBalancingIPType; -import org.apache.stratos.messaging.domain.topology.*; -import org.apache.stratos.messaging.event.topology.CompleteTopologyEvent; -import org.apache.stratos.messaging.event.topology.MemberInitializedEvent; -import org.testng.annotations.AfterSuite; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -public class AgentStartupTest extends PythonAgentTestManager { - private static final Log log = LogFactory.getLog(AgentStartupTest.class); - private static final int STARTUP_TIMEOUT = 60000; - private static final String RESOURCES_PATH = "/suite-1"; - private static final String CLUSTER_ID = "php.php.domain"; - private static final String DEPLOYMENT_POLICY_NAME = "deployment-policy-1"; - private static final String AUTOSCALING_POLICY_NAME = "autoscaling-policy-1"; - private static final String APP_ID = "application-1"; - private static final String MEMBER_ID = "php.member-1"; - private static final String CLUSTER_INSTANCE_ID = "cluster-1-instance-1"; - private static final String NETWORK_PARTITION_ID = "network-partition-1"; - private static final String PARTITION_ID = "partition-1"; - private static final String TENANT_ID = "-1234"; - private static final String SERVICE_NAME = "php"; - private boolean startupTestCompleted = false; - - @BeforeSuite - public void setupAgentStartupTest() { - // Set jndi.properties.dir system property for initializing event publishers and receivers - System.setProperty("jndi.properties.dir", getResourcesPath(RESOURCES_PATH)); - - // start Python agent with configurations provided in resource path - setup(RESOURCES_PATH); - - // Simulate server socket - startServerSocket(8080); - } - - - /** - * TearDown method for test method testPythonCartridgeAgent - */ - @AfterSuite - public void tearDownAgentStartupTest() { - tearDown(); - } - - @Test(timeOut = STARTUP_TIMEOUT) - public void testPythonCartridgeAgent() { - startCommunicatorThread(); - Thread startupTestThread = new Thread(new Runnable() { - @Override - public void run() { - while (!eventReceiverInitiated) { - sleep(2000); - } - List<String> outputLines = new ArrayList<String>(); - while (!outputStream.isClosed()) { - List<String> newLines = getNewLines(outputLines, outputStream.toString()); - if (newLines.size() > 0) { - for (String line : newLines) { - if (line.contains("Subscribed to 'topology/#'")) { - sleep(2000); - // Send complete topology event - log.info("Publishing complete topology event..."); - Topology topology = createTestTopology(); - CompleteTopologyEvent completeTopologyEvent = new CompleteTopologyEvent(topology); - publishEvent(completeTopologyEvent); - log.info("Complete topology event published"); - - // Publish member initialized event - log.info("Publishing member initialized event..."); - MemberInitializedEvent memberInitializedEvent = new MemberInitializedEvent( - SERVICE_NAME, CLUSTER_ID, CLUSTER_INSTANCE_ID, MEMBER_ID, NETWORK_PARTITION_ID, - PARTITION_ID - ); - publishEvent(memberInitializedEvent); - log.info("Member initialized event published"); - } - // TODO: properly mock the CEP server - if (line.contains("Published event to thrift stream")) { - startupTestCompleted = true; - } - } - } - sleep(1000); - } - } - }); - - startupTestThread.start(); - - while (!instanceStarted || !instanceActivated || !startupTestCompleted) { - // wait until the instance activated event is received. - // this will assert whether instance got activated within timeout period; no need for explicit assertions - sleep(2000); - } - } - - - /** - * Create test topology - * - * @return - */ - private Topology createTestTopology() { - Topology topology = new Topology(); - Service service = new Service(SERVICE_NAME, ServiceType.SingleTenant); - topology.addService(service); - - Cluster cluster = new Cluster(service.getServiceName(), CLUSTER_ID, DEPLOYMENT_POLICY_NAME, - AUTOSCALING_POLICY_NAME, APP_ID); - service.addCluster(cluster); - - Member member = new Member(service.getServiceName(), cluster.getClusterId(), MEMBER_ID, - CLUSTER_INSTANCE_ID, NETWORK_PARTITION_ID, PARTITION_ID, LoadBalancingIPType.Private, - System.currentTimeMillis()); - - member.setDefaultPrivateIP("10.0.0.1"); - member.setDefaultPublicIP("20.0.0.1"); - Properties properties = new Properties(); - properties.setProperty("prop1", "value1"); - member.setProperties(properties); - member.setStatus(MemberStatus.Created); - cluster.addMember(member); - - return topology; - } -} \ No newline at end of file
