def test_ssl_connection(self):
        config = {}
        config.update(self.connect_kwargs)

        # Secure by default
        session = mysqlx.get_node_session(config)

        res = mysqlx.statement.SqlStatement(session._connection,
            "SHOW STATUS LIKE 'Mysqlx_ssl_active'").execute().fetch_all()
        self.assertEqual("ON", res[0][1])

        res = mysqlx.statement.SqlStatement(session._connection,
            "SHOW STATUS LIKE 'Mysqlx_ssl_version'").execute().fetch_all()
        self.assertTrue("TLS" in res[0][1])

        session.close()

        config["ssl-key"] = tests.SSL_KEY
        self.assertRaises(mysqlx.errors.InterfaceError,
                          mysqlx.get_node_session, config)

        # Connection with ssl parameters
        config["ssl-ca"] = tests.SSL_CA
        config["ssl-cert"] = tests.SSL_CERT

        session = mysqlx.get_node_session(config)

        res = session.sql("SHOW STATUS LIKE 'Mysqlx_ssl_active'") \
                     .execute().fetch_all()
        self.assertEqual("ON", res[0][1])

        res = session.sql("SHOW STATUS LIKE 'Mysqlx_ssl_version'") \
            .execute().fetch_all()
        self.assertTrue("TLS" in res[0][1])

        session.close()

        ssl_ca="{0}{1}".format(config["ssl-ca"][0],
                               quote_plus(config["ssl-ca"][1:]))
        ssl_key="{0}{1}".format(config["ssl-key"][0],
                                quote_plus(config["ssl-key"][1:]))
        ssl_cert="{0}{1}".format(config["ssl-ca"][0],
                                 quote_plus(config["ssl-cert"][1:]))
        uri = build_uri(user=config["user"], password=config["password"],
                        host=config["host"], ssl_ca=ssl_ca,
                        ssl_cert=ssl_cert, ssl_key=ssl_key)
        session = mysqlx.get_node_session(uri)

        ssl_ca = "({0})".format(config["ssl-ca"])
        ssl_cert = "({0})".format(config["ssl-cert"])
        ssl_key = "({0})".format(config["ssl-key"])
        uri = build_uri(user=config["user"], password=config["password"],
                        host=config["host"], ssl_ca=ssl_ca,
                        ssl_cert=ssl_cert, ssl_key=ssl_key)
        session = mysqlx.get_node_session(uri)
    def test_ssl_connection(self):
        config = {}
        config.update(self.connect_kwargs)

        # Secure by default
        session = mysqlx.get_node_session(config)

        res = mysqlx.statement.SqlStatement(session._connection,
            "SHOW STATUS LIKE 'Mysqlx_ssl_active'").execute().fetch_all()
        self.assertEqual("ON", res[0][1])

        res = mysqlx.statement.SqlStatement(session._connection,
            "SHOW STATUS LIKE 'Mysqlx_ssl_version'").execute().fetch_all()
        self.assertTrue("TLS" in res[0][1])

        session.close()

        config["ssl-key"] = tests.SSL_KEY
        self.assertRaises(mysqlx.errors.InterfaceError,
                          mysqlx.get_node_session, config)

        # Connection with ssl parameters
        config["ssl-ca"] = tests.SSL_CA
        config["ssl-cert"] = tests.SSL_CERT

        session = mysqlx.get_node_session(config)

        res = session.sql("SHOW STATUS LIKE 'Mysqlx_ssl_active'") \
                     .execute().fetch_all()
        self.assertEqual("ON", res[0][1])

        res = session.sql("SHOW STATUS LIKE 'Mysqlx_ssl_version'") \
            .execute().fetch_all()
        self.assertTrue("TLS" in res[0][1])

        session.close()

        uri = ("mysqlx://{0}:{1}@{2}?ssl-ca={3}&ssl-cert={4}&ssl-key={5}"
               "".format(config["user"], config["password"], config["host"],
                         quote(config["ssl-ca"]), quote(config["ssl-cert"]),
                         quote(config["ssl-key"])))
        session = mysqlx.get_node_session(uri)

        uri = ("mysqlx://{0}:{1}@{2}?ssl-ca=({3})&ssl-cert=({4})&ssl-key=({5})"
               "".format(config["user"], config["password"], config["host"],
                         config["ssl-ca"], config["ssl-cert"],
                         config["ssl-key"]))
        session = mysqlx.get_node_session(uri)
Exemplo n.º 3
0
 def setUp(self):
     self.connect_kwargs = tests.get_mysqlx_config()
     self.schema_name = self.connect_kwargs["schema"]
     try:
         self.session = mysqlx.get_node_session(self.connect_kwargs)
     except mysqlx.Error as err:
         self.fail("{0}".format(err))
 def setUp(self):
     self.connect_kwargs = tests.get_mysqlx_config()
     self.schema_name = self.connect_kwargs["schema"]
     try:
         self.session = mysqlx.get_node_session(self.connect_kwargs)
     except mysqlx.Error as err:
         self.fail("{0}".format(err))
 def test_disabled_x_protocol(self):
     node_session = mysqlx.get_node_session(self.connect_kwargs)
     res = node_session.sql("SHOW VARIABLES WHERE Variable_name = 'port'") \
                       .execute().fetch_all()
     settings = self.connect_kwargs.copy()
     settings["port"] = res[0][1]  # Lets use the MySQL classic port
     node_session.close()
     self.assertRaises(mysqlx.errors.ProgrammingError, mysqlx.get_session,
                       settings)
 def test_disabled_x_protocol(self):
     node_session = mysqlx.get_node_session(self.connect_kwargs)
     res = node_session.sql("SHOW VARIABLES WHERE Variable_name = 'port'") \
                       .execute().fetch_all()
     settings = self.connect_kwargs.copy()
     settings["port"] = res[0][1]  # Lets use the MySQL classic port
     node_session.close()
     self.assertRaises(mysqlx.errors.ProgrammingError, mysqlx.get_session,
                       settings)
Exemplo n.º 7
0
    def test_get_default_schema(self):
        schema = self.session.get_default_schema()
        self.assertTrue(schema, mysqlx.Schema)
        self.assertEqual(schema.get_name(), self.connect_kwargs["schema"])

        # Test without default schema configured at connect time
        settings = self.connect_kwargs.copy()
        settings["schema"] = None
        session = mysqlx.get_node_session(settings)
        self.assertRaises(mysqlx.ProgrammingError, session.get_default_schema)
        session.close()
    def test_get_default_schema(self):
        schema = self.session.get_default_schema()
        self.assertTrue(schema, mysqlx.Schema)
        self.assertEqual(schema.get_name(), self.connect_kwargs["schema"])

        # Test without default schema configured at connect time
        settings = self.connect_kwargs.copy()
        settings["schema"] = None
        session = mysqlx.get_node_session(settings)
        self.assertRaises(mysqlx.ProgrammingError, session.get_default_schema)
        session.close()
    def test_connection_uri(self):
        uri = build_uri(user=self.connect_kwargs["user"],
                        password=self.connect_kwargs["password"],
                        host=self.connect_kwargs["host"],
                        port=self.connect_kwargs["port"],
                        schema=self.connect_kwargs["schema"])
        session = mysqlx.get_node_session(uri)
        self.assertIsInstance(session, mysqlx.NodeSession)

        # Test URI parser function
        for uri, res in _URI_TEST_RESULTS:
            try:
                settings = mysqlx._get_connection_settings(uri)
                self.assertEqual(res, settings)
            except mysqlx.Error:
                self.assertEqual(res, None)
    def test_connection_uri(self):
        uri = build_uri(user=self.connect_kwargs["user"],
                        password=self.connect_kwargs["password"],
                        host=self.connect_kwargs["host"],
                        port=self.connect_kwargs["port"],
                        schema=self.connect_kwargs["schema"])
        session = mysqlx.get_node_session(uri)
        self.assertIsInstance(session, mysqlx.NodeSession)

        # Test URI parser function
        for uri, res in _URI_TEST_RESULTS:
            try:
                settings = mysqlx._get_connection_settings(uri)
                self.assertEqual(res, settings)
            except mysqlx.Error:
                self.assertEqual(res, None)
Exemplo n.º 11
0
 def connect(self):
     col_name = self.term + '_tweets'
     session = mysqlx.get_session(mysql_auth)
     my_db = session.get_schema(SCHEMA_NAME)
     # Get (or create, if necessary) the Collection
     try:
         col = my_db.get_collection(col_name, check_existence=True)
     except mysqlx.errors.ProgrammingError:
         logging.info("Need to create Collection " + col_name)
         col = my_db.create_collection(col_name)
         # only a NodeSession can execute SQL
         node_session = mysqlx.get_node_session(mysql_auth)
         node_session.sql(
             'alter table ' + SCHEMA_NAME + '.' + col_name +
             ' ADD tweet_id bigint unsigned GENERATED ALWAYS AS ( doc->>"$.id" ), ADD UNIQUE INDEX id_uniq(tweet_id);'
         ).execute()
     return col
Exemplo n.º 12
0
def ensure_session():
  global testSession
  global session
  if testSession is None:
    print "Creating session...\n"

    testSession = mysqlx.get_node_session(__uripwd)

    # Ensures the user on dev-api exists
    try:
      testSession.sql("create user mike@'%' identified by 's3cr3t!'").execute()
      testSession.sql("grant all on *.* to mike@'%' with grant option").execute()
    except:
      pass
  else:
    print "Session exists...\n"
    
  session = testSession
Exemplo n.º 13
0
import mysqlx

# Connect to server using a NodeSession
mySession = mysqlx.get_node_session('mike:s3cr3t!@localhost')

# Switch to use schema 'test'
mySession.sql("USE test").execute()

# In a NodeSession context the full SQL language can be used
sql = """CREATE PROCEDURE my_add_one_procedure
                                 (INOUT incr_param INT)
                                 BEGIN 
                                         SET incr_param = incr_param + 1;
                                 END
                        """

mySession.sql(sql).execute()
mySession.sql("SET @my_var = ?").bind(10).execute()
mySession.sql("CALL my_add_one_procedure(@my_var)").execute()
mySession.sql("DROP PROCEDURE my_add_one_procedure").execute()

# Use an SQL query to get the result
myResult = mySession.sql("SELECT @my_var").execute()

# Gets the row and prints the first column
row = myResult.fetch_one()
print row[0]

mySession.close()
	collection.create_index( 'rtwt_idx', False ).field( "$.retweet_count", "INT", False ).execute()

def add_user_table( session ):
	xsession = session
	user_collection_name = 'users'
	tweet_col = xsession.get_schema( SCHEMA_NAME ).get_collection( tweets_collection )
	logging.debug( "Pulling all users" )
	users = []
	try:
		users = tweet_col.find().fields('user').group_by('user.id, user, user.created_at').sort( 'user.created_at').execute().fetch_all()
	except Exception as e:
		print( str( e ) )
	logging.debug( str( type( users ) )+ ": " + str( type( users[0] ) ) )
	if( PREPEND_TERM ):
		user_collection_name = term + '_' + user_collection_name
	user_collection = xsession.get_schema( SCHEMA_NAME).create_collection( user_collection_name, reuse = True )
	for u in users:
		try:
			#logging.debug( u.user[u'screen_name'] )
			user_collection.add( u.user ).execute()	
		except Exception as e:
			print( str( e ))


ns = mysqlx.get_node_session( mysql_auth)
xs = mysqlx.get_session( mysql_auth )
add_date_column(ns)
add_user_column(ns)
add_retweet_count_index( xs )
add_user_table( xs)
# Assumptions: validate_crud_functions available
# Assumes __uripwd is defined as <user>:<pwd>@<host>:<plugin_port>
import mysqlx

mySession = mysqlx.get_node_session(__uripwd)

ensure_schema_does_not_exist(mySession, 'js_shell_test')
schema = mySession.create_schema('js_shell_test')

# Creates a test collection and inserts data into it
collection = schema.create_collection('collection1')

# --------------------------------------
# Create index, dynamic function testing
# --------------------------------------
#@ CollectionCreateIndex: valid operations after create_index
create_index = collection.create_index('_name')
validate_crud_functions(create_index, ['field'])

#@ CollectionAdd: valid operations after field
create_index.field('name', "TEXT(50)", True)
validate_crud_functions(create_index, ['field', 'execute'])

#@ CollectionAdd: valid operations after execute
result = create_index.execute()
validate_crud_functions(create_index, [])

# -----------------------------------
# Error conditions on chained methods
# -----------------------------------
#@# Error conditions on create_index
import mysqlx

def process_warnings(result):
  if result.get_warning_count():
    for warning in result.get_warnings():
      print 'Type [%s] (Code %s): %s\n' % (warning.level, warning.code, warning.message)
  else:
    print "No warnings were returned.\n"
  

# Connect to server
mySession = mysqlx.get_node_session( {
  'host': 'localhost', 'port': 33060,
  'dbUser': '******', 'dbPassword': '******' } );

# Disables warning generation
mySession.set_fetch_warnings(False)
result = mySession.sql('drop schema if exists unexisting').execute()
process_warnings(result)

# Enables warning generation
mySession.set_fetch_warnings(True)
result = mySession.sql('drop schema if exists unexisting').execute()
process_warnings(result)
Exemplo n.º 17
0
#@ mysqlx module: get_session through data and password
data = {'host': __host, 'port': __port, 'schema': __schema, 'dbUser': __user}

mySession = mysqlx.get_session(data, __pwd)

print mySession, '\n'

if mySession.uri == __displayuridb:
    print 'Session using right URI\n'
else:
    print 'Session using wrong URI\n'

mySession.close()

#@ mysqlx module: get_node_session through URI
mySession = mysqlx.get_node_session(__uripwd)

print mySession, '\n'

if mySession.uri == __displayuri:
    print 'Session using right URI\n'
else:
    print 'Session using wrong URI\n'

mySession.close()

#@ mysqlx module: get_node_session through URI and password
mySession = mysqlx.get_node_session(__uri, __pwd)

print mySession, '\n'
Exemplo n.º 18
0
mySession.start_transaction()
res1 = collection.add({"name": 'john', "age": 15}).execute()
res2 = collection.add({"name": 'carol', "age": 16}).execute()
res3 = collection.add({"name": 'alma', "age": 17}).execute()
mySession.commit()

result = collection.find().execute()
print 'Inserted Documents:', len(result.fetch_all())

# Cleanup
mySession.drop_schema('session_schema')
mySession.drop_schema('quoted schema')
mySession.close()

#@ NodeSession: validating members
nodeSession = mysqlx.get_node_session(__uripwd)
all_members = dir(nodeSession)

# Remove the python built in members
nodeSessionMembers = []
for member in all_members:
    if not member.startswith('__'):
        nodeSessionMembers.append(member)

validateMember(nodeSessionMembers, 'close')
validateMember(nodeSessionMembers, 'create_schema')
validateMember(nodeSessionMembers, 'get_current_schema')
validateMember(nodeSessionMembers, 'get_default_schema')
validateMember(nodeSessionMembers, 'get_schema')
validateMember(nodeSessionMembers, 'get_schemas')
validateMember(nodeSessionMembers, 'get_uri')
    def test_ssl_connection(self):
        config = {}
        config.update(self.connect_kwargs)

        # Secure by default
        session = mysqlx.get_node_session(config)

        res = mysqlx.statement.SqlStatement(
            session._connection,
            "SHOW STATUS LIKE 'Mysqlx_ssl_active'").execute().fetch_all()
        self.assertEqual("ON", res[0][1])

        res = mysqlx.statement.SqlStatement(
            session._connection,
            "SHOW STATUS LIKE 'Mysqlx_ssl_version'").execute().fetch_all()
        self.assertTrue("TLS" in res[0][1])

        session.close()

        config["ssl-key"] = tests.SSL_KEY
        self.assertRaises(mysqlx.errors.InterfaceError,
                          mysqlx.get_node_session, config)

        # Connection with ssl parameters
        config["ssl-ca"] = tests.SSL_CA
        config["ssl-cert"] = tests.SSL_CERT

        session = mysqlx.get_node_session(config)

        res = session.sql("SHOW STATUS LIKE 'Mysqlx_ssl_active'") \
                     .execute().fetch_all()
        self.assertEqual("ON", res[0][1])

        res = session.sql("SHOW STATUS LIKE 'Mysqlx_ssl_version'") \
            .execute().fetch_all()
        self.assertTrue("TLS" in res[0][1])

        session.close()

        ssl_ca = "{0}{1}".format(config["ssl-ca"][0],
                                 quote_plus(config["ssl-ca"][1:]))
        ssl_key = "{0}{1}".format(config["ssl-key"][0],
                                  quote_plus(config["ssl-key"][1:]))
        ssl_cert = "{0}{1}".format(config["ssl-ca"][0],
                                   quote_plus(config["ssl-cert"][1:]))
        uri = build_uri(user=config["user"],
                        password=config["password"],
                        host=config["host"],
                        ssl_ca=ssl_ca,
                        ssl_cert=ssl_cert,
                        ssl_key=ssl_key)
        session = mysqlx.get_node_session(uri)

        ssl_ca = "({0})".format(config["ssl-ca"])
        ssl_cert = "({0})".format(config["ssl-cert"])
        ssl_key = "({0})".format(config["ssl-key"])
        uri = build_uri(user=config["user"],
                        password=config["password"],
                        host=config["host"],
                        ssl_ca=ssl_ca,
                        ssl_cert=ssl_cert,
                        ssl_key=ssl_key)
        session = mysqlx.get_node_session(uri)
Exemplo n.º 20
0
def createTestTable(session, name):
    
    # use escape function to quote names/identifier
    quoted_name = session.quote_name(name)
    
    session.sql("DROP TABLE IF EXISTS " + quoted_name).execute()
    
    create = "CREATE TABLE "
    create += quoted_name
    create += " (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)"
    
    session.sql(create).execute()
    
    return session.get_current_schema().get_table(name)

import mysqlx

session = mysqlx.get_node_session({
        'dataSourceFile': 'mysqlxconfig.json', 'app': 'myapp',
        'dbUser': '******', 'dbPassword': '******'})

default_schema = session.get_default_schema().name
session.set_current_schema(default_schema)

# Creates some tables
table1 = createTestTable(session, 'test1')
table2 = createTestTable(session, 'test2')