Skip to content
Snippets Groups Projects
Commit 6c6482cf authored by Brandon Rodriguez's avatar Brandon Rodriguez
Browse files

Various function tests for further syntax understanding

parent a7d19d5c
No related merge requests found
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
// User Imports. // User Imports.
const config = require('./config.js'); const config = require('./config.js');
const { create_message, generate_users, test_db_functions } = require('./src/database_functions.js'); const { checkUserExist, create_message, createMessageFrom, getUsersWithMessages, generate_users, test_db_functions } = require('./src/database_functions.js');
const { userConfirmation } = require('./src/helper_functions.js'); const { userConfirmation } = require('./src/helper_functions.js');
const { Logging, testLogLevels } = require('./src/logging.js'); const { Logging, testLogLevels } = require('./src/logging.js');
const MySql = require('./src/mysql.js'); const MySql = require('./src/mysql.js');
...@@ -23,24 +23,64 @@ async function main() { ...@@ -23,24 +23,64 @@ async function main() {
logger.info('Starting program.'); logger.info('Starting program.');
logger.log(''); logger.log('');
// testLogLevels(logger);
// Create MySql helper class. // Create MySql helper class.
var debug = false; var debug = true;
const mysql = await new MySql(config['mysql'], debug); const mysql = await new MySql(config['mysql'], debug);
// Connect to database. // Connect to database.
await mysql.open_conn(); await mysql.open_conn();
// Reset database by emptying all tables. // // Reset database by emptying all tables.
await mysql.reset_db(true); // await mysql.reset_db(true);
//
// // Generate database users.
// generate_users(mysql);
//
// // Generate 100,0000 messages.
// for (let index = 0; index < 100000; index++) {
// create_message(mysql);
// }
// Generate database users. // Theoretical addUser function.
generate_users(mysql); try {
addUser();
} catch (err) {
// Generate 100,0000 messages.
for (let index = 0; index < 100000; index++) {
create_message(mysql);
} }
// Check for users with an expected name.
await checkUserExist(mysql, 'Bob', debug);
// Check for users with an unexpected name.
await checkUserExist(mysql, 'Potato', debug);
// Add a duplicate expected name and check results again.
let query = 'INSERT INTO user (name) VALUES (?);';
let parameters = ['Bob'];
await mysql.query(query, parameters);
await checkUserExist(mysql, 'Bob', debug);
// Now we want to check what users have created messages.
// First clear messages.
await mysql.reset_db(true);
await generate_users(mysql);
// Check with no messages created.
await getUsersWithMessages(mysql, debug);
// Create messages from Johnny and Sarah.
createMessageFrom(mysql, 2);
createMessageFrom(mysql, 2);
createMessageFrom(mysql, 4);
createMessageFrom(mysql, 4);
createMessageFrom(mysql, 4);
createMessageFrom(mysql, 4);
// Check again, now that 6 messages have been made.
await getUsersWithMessages(mysql, debug);
// Close existing database connections. // Close existing database connections.
await mysql.close_conn(); await mysql.close_conn();
......
...@@ -75,7 +75,7 @@ async function generate_users(mysql, debug) { ...@@ -75,7 +75,7 @@ async function generate_users(mysql, debug) {
async function create_message(mysql, debug) { async function create_message(mysql, debug) {
if (debug) { if (debug) {
logger.log(''); logger.log('');
logger.debug('Executing `generate_users()` function:'); logger.debug('Executing `create_message()` function:');
} }
// Get pk of sender. Sender is chosen at random. // Get pk of sender. Sender is chosen at random.
...@@ -90,8 +90,101 @@ async function create_message(mysql, debug) { ...@@ -90,8 +90,101 @@ async function create_message(mysql, debug) {
} }
/**
* Creates a single message from a given user.
* :param mysql: Instance of MySQL connector class.
* :param debug: Bool indicating if debug mode or not.
*/
async function createMessageFrom(mysql, senderId, debug) {
if (debug) {
logger.log('');
logger.debug('Executing `createMessageFrom()` function:');
logger.debug(' senderId: {}'.format(senderId));
}
// Here, we would normally generate a message too. But we're lazy.
message = 'Test Message.';
// Add message to database.
mysql.query('INSERT INTO message (user_id, message) VALUES (?, ?)', [senderId, message]);
}
/**
* Checks if user exist for given username. If so, returns user id.
* :param mysql: Instance of MySQL connector class.
* :param userName: Username to check for.
* :param debug: Bool indicating if debug mode or not.
*/
async function checkUserExist(mysql, userName, debug) {
if (debug) {
logger.log('');
logger.debug('Executing `checkUserExist()` function:');
logger.debug(' mysql: {}'.format(mysql));
logger.debug(' userName: {}'.format(userName));
logger.debug(' debug: {}'.format(debug));
}
// Execute query.
let query = 'SELECT COUNT(name) AS userCount FROM user WHERE name = ?;';
let parameters = [userName];
logger.sql_q(query, parameters);
let results = await mysql.query(query, parameters);
// Check results.
if (results.length < 1) {
// No results found.
logger.info('User with name "{}" not found.'.format(userName));
return [];
} else {
// One or more results found.
let userCount = results[0]['userCount'];
logger.info('Found {} users with name "{}".'.format(userCount, userName));
return userCount;
}
}
/**
* Returns all users that have sent a message.
* :param mysql: Instance of MySQL connector class.
* :param debug: Bool indicating if debug mode or not.
*/
async function getUsersWithMessages(mysql, debug) {
if (debug) {
logger.log('');
logger.debug('Executing `getUsersWithMessages()` function:');
logger.debug(' mysql: {}'.format(mysql));
logger.debug(' debug: {}'.format(debug));
}
// Get list of all messages.
// let query = 'SELECT UNIQUE user_id FROM message;';
let query = 'SELECT UNIQUE user.name AS name, message.user_id AS user_id FROM message INNER JOIN user ON message.user_id = user.id;';
logger.sql_q(query);
let results = await mysql.query(query);
// Check results.
if (results.length < 1) {
logger.info('No users have sent messages yet.');
return [];
} else {
// Get user names in list.
let user_list = []
for (let index = 0; index < results.length; index++) {
user_list.push(results[index]['name']);
}
logger.info('Users have sent messages: {}'.format(user_list));
return user_list;
}
}
module.exports = { module.exports = {
checkUserExist,
create_message, create_message,
createMessageFrom,
getUsersWithMessages,
generate_users, generate_users,
test_db_functions, test_db_functions,
}; };
...@@ -75,6 +75,9 @@ class MySql { ...@@ -75,6 +75,9 @@ class MySql {
logger.debug('Closing MySql connection...'); logger.debug('Closing MySql connection...');
} }
// Wait 2 seconds before trying anything. Helps ensure queries can at least queue up before closing.
await sleep(2000);
// Check if connection pool is currently open. // Check if connection pool is currently open.
if (this.connection_pool != null) { if (this.connection_pool != null) {
// Connection pool currently exists. Check if associated connections are still running. // Connection pool currently exists. Check if associated connections are still running.
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment