mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 12:56:14 +01:00 
			
		
		
		
	as it was thinking it was enabled even if initialize_performance_schema wasn't called at all
		
			
				
	
	
		
			751 lines
		
	
	
	
		
			24 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			751 lines
		
	
	
	
		
			24 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* Copyright (c) 2008, 2023, Oracle and/or its affiliates.
 | 
						|
 | 
						|
  This program is free software; you can redistribute it and/or modify
 | 
						|
  it under the terms of the GNU General Public License, version 2.0,
 | 
						|
  as published by the Free Software Foundation.
 | 
						|
 | 
						|
  This program is also distributed with certain software (including
 | 
						|
  but not limited to OpenSSL) that is licensed under separate terms,
 | 
						|
  as designated in a particular file or component or in included license
 | 
						|
  documentation.  The authors of MySQL hereby grant you an additional
 | 
						|
  permission to link the program and your derivative works with the
 | 
						|
  separately licensed software that they have included with MySQL.
 | 
						|
 | 
						|
  This program is distributed in the hope that it will be useful,
 | 
						|
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
  GNU General Public License, version 2.0, for more details.
 | 
						|
 | 
						|
  You should have received a copy of the GNU General Public License
 | 
						|
  along with this program; if not, write to the Free Software Foundation,
 | 
						|
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
 | 
						|
 | 
						|
#include <my_global.h>
 | 
						|
#include <my_thread.h>
 | 
						|
#include <string.h>                             // strncpy
 | 
						|
#include <pfs_instr_class.h>
 | 
						|
#include <pfs_instr.h>
 | 
						|
#include <pfs_global.h>
 | 
						|
#include <tap.h>
 | 
						|
 | 
						|
#include "stub_global_status_var.h"
 | 
						|
 | 
						|
void test_no_registration()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_sync_key key;
 | 
						|
  PFS_thread_key thread_key;
 | 
						|
  PFS_file_key file_key;
 | 
						|
  PFS_socket_key socket_key;
 | 
						|
  PFS_memory_key memory_key;
 | 
						|
  PFS_mutex_class *mutex;
 | 
						|
  PFS_rwlock_class *rwlock;
 | 
						|
  PFS_cond_class *cond;
 | 
						|
  PFS_thread_class *thread;
 | 
						|
  PFS_file_class *file;
 | 
						|
  PFS_socket_class *socket;
 | 
						|
  PFS_memory_class *memory;
 | 
						|
  /* PFS_table_share *table; */
 | 
						|
 | 
						|
  rc= init_sync_class(0, 0, 0);
 | 
						|
  ok(rc == 0, "zero init (sync)");
 | 
						|
  rc= init_thread_class(0);
 | 
						|
  ok(rc == 0, "zero init (thread)");
 | 
						|
  rc= init_file_class(0);
 | 
						|
  ok(rc == 0, "zero init (file)");
 | 
						|
  rc= init_socket_class(0);
 | 
						|
  ok(rc == 0, "zero init (socket)");
 | 
						|
  rc= init_table_share(0);
 | 
						|
  ok(rc == 0, "zero init (table)");
 | 
						|
  rc= init_memory_class(0);
 | 
						|
  ok(rc == 0, "zero init (memory)");
 | 
						|
 | 
						|
  key= register_mutex_class("FOO", 3, 0);
 | 
						|
  ok(key == 0, "no mutex registered");
 | 
						|
  key= register_mutex_class("BAR", 3, 0);
 | 
						|
  ok(key == 0, "no mutex registered");
 | 
						|
  key= register_mutex_class("FOO", 3, 0);
 | 
						|
  ok(key == 0, "no mutex registered");
 | 
						|
 | 
						|
  key= register_rwlock_class("FOO", 3, 0);
 | 
						|
  ok(key == 0, "no rwlock registered");
 | 
						|
  key= register_rwlock_class("BAR", 3, 0);
 | 
						|
  ok(key == 0, "no rwlock registered");
 | 
						|
  key= register_rwlock_class("FOO", 3, 0);
 | 
						|
  ok(key == 0, "no rwlock registered");
 | 
						|
 | 
						|
  key= register_cond_class("FOO", 3, 0);
 | 
						|
  ok(key == 0, "no cond registered");
 | 
						|
  key= register_cond_class("BAR", 3, 0);
 | 
						|
  ok(key == 0, "no cond registered");
 | 
						|
  key= register_cond_class("FOO", 3, 0);
 | 
						|
  ok(key == 0, "no cond registered");
 | 
						|
 | 
						|
  thread_key= register_thread_class("FOO", 3, 0);
 | 
						|
  ok(thread_key == 0, "no thread registered");
 | 
						|
  thread_key= register_thread_class("BAR", 3, 0);
 | 
						|
  ok(thread_key == 0, "no thread registered");
 | 
						|
  thread_key= register_thread_class("FOO", 3, 0);
 | 
						|
  ok(thread_key == 0, "no thread registered");
 | 
						|
 | 
						|
  file_key= register_file_class("FOO", 3, 0);
 | 
						|
  ok(file_key == 0, "no file registered");
 | 
						|
  file_key= register_file_class("BAR", 3, 0);
 | 
						|
  ok(file_key == 0, "no file registered");
 | 
						|
  file_key= register_file_class("FOO", 3, 0);
 | 
						|
  ok(file_key == 0, "no file registered");
 | 
						|
 | 
						|
  socket_key= register_socket_class("FOO", 3, 0);
 | 
						|
  ok(socket_key == 0, "no socket registered");
 | 
						|
  socket_key= register_socket_class("BAR", 3, 0);
 | 
						|
  ok(socket_key == 0, "no socket registered");
 | 
						|
  socket_key= register_socket_class("FOO", 3, 0);
 | 
						|
  ok(socket_key == 0, "no socket registered");
 | 
						|
 | 
						|
  memory_key= register_memory_class("FOO", 3, 0);
 | 
						|
  ok(memory_key == 0, "no memory registered");
 | 
						|
  memory_key= register_memory_class("BAR", 3, 0);
 | 
						|
  ok(memory_key == 0, "no memory registered");
 | 
						|
  memory_key= register_memory_class("FOO", 3, 0);
 | 
						|
  ok(memory_key == 0, "no memory registered");
 | 
						|
 | 
						|
#ifdef LATER
 | 
						|
  PFS_thread fake_thread;
 | 
						|
  fake_thread.m_table_share_hash_pins= NULL;
 | 
						|
 | 
						|
  table= find_or_create_table_share(& fake_thread, false, "foo_db", 6, "foo_table", 9);
 | 
						|
  ok(table == NULL, "not created");
 | 
						|
  table= find_or_create_table_share(& fake_thread, false, "bar_db", 6, "bar_table", 9);
 | 
						|
  ok(table == NULL, "not created");
 | 
						|
  table= find_or_create_table_share(& fake_thread, false, "foo_db", 6, "foo_table", 9);
 | 
						|
  ok(table == NULL, "not created");
 | 
						|
#endif
 | 
						|
 | 
						|
  mutex= find_mutex_class(0);
 | 
						|
  ok(mutex == NULL, "no mutex key 0");
 | 
						|
  mutex= find_mutex_class(1);
 | 
						|
  ok(mutex == NULL, "no mutex key 1");
 | 
						|
  mutex= find_mutex_class(9999);
 | 
						|
  ok(mutex == NULL, "no mutex key 9999");
 | 
						|
 | 
						|
  rwlock= find_rwlock_class(0);
 | 
						|
  ok(rwlock == NULL, "no rwlock key 0");
 | 
						|
  rwlock= find_rwlock_class(1);
 | 
						|
  ok(rwlock == NULL, "no rwlock key 1");
 | 
						|
  rwlock= find_rwlock_class(9999);
 | 
						|
  ok(rwlock == NULL, "no rwlock key 9999");
 | 
						|
 | 
						|
  cond= find_cond_class(0);
 | 
						|
  ok(cond == NULL, "no cond key 0");
 | 
						|
  cond= find_cond_class(1);
 | 
						|
  ok(cond == NULL, "no cond key 1");
 | 
						|
  cond= find_cond_class(9999);
 | 
						|
  ok(cond == NULL, "no cond key 9999");
 | 
						|
 | 
						|
  thread= find_thread_class(0);
 | 
						|
  ok(thread == NULL, "no thread key 0");
 | 
						|
  thread= find_thread_class(1);
 | 
						|
  ok(thread == NULL, "no thread key 1");
 | 
						|
  thread= find_thread_class(9999);
 | 
						|
  ok(thread == NULL, "no thread key 9999");
 | 
						|
 | 
						|
  file= find_file_class(0);
 | 
						|
  ok(file == NULL, "no file key 0");
 | 
						|
  file= find_file_class(1);
 | 
						|
  ok(file == NULL, "no file key 1");
 | 
						|
  file= find_file_class(9999);
 | 
						|
  ok(file == NULL, "no file key 9999");
 | 
						|
 | 
						|
  socket= find_socket_class(0);
 | 
						|
  ok(socket == NULL, "no socket key 0");
 | 
						|
  socket= find_socket_class(1);
 | 
						|
  ok(socket == NULL, "no socket key 1");
 | 
						|
  socket= find_socket_class(9999);
 | 
						|
  ok(socket == NULL, "no socket key 9999");
 | 
						|
 | 
						|
  memory= find_memory_class(0);
 | 
						|
  ok(memory == NULL, "no memory key 0");
 | 
						|
  memory= find_memory_class(1);
 | 
						|
  ok(memory == NULL, "no memory key 1");
 | 
						|
  memory= find_memory_class(9999);
 | 
						|
  ok(memory == NULL, "no memory key 9999");
 | 
						|
 | 
						|
  cleanup_sync_class();
 | 
						|
  cleanup_thread_class();
 | 
						|
  cleanup_file_class();
 | 
						|
  cleanup_socket_class();
 | 
						|
  cleanup_table_share();
 | 
						|
  cleanup_memory_class();
 | 
						|
}
 | 
						|
 | 
						|
void test_mutex_registration()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_sync_key key;
 | 
						|
  PFS_mutex_class *mutex;
 | 
						|
 | 
						|
  rc= init_sync_class(5, 0, 0);
 | 
						|
  ok(rc == 0, "room for 5 mutex");
 | 
						|
 | 
						|
  key= register_mutex_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo registered");
 | 
						|
  key= register_mutex_class("BAR", 3, 0);
 | 
						|
  ok(key == 2, "bar registered");
 | 
						|
  key= register_mutex_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo re registered");
 | 
						|
  key= register_mutex_class("M-3", 3, 0);
 | 
						|
  ok(key == 3, "M-3 registered");
 | 
						|
  key= register_mutex_class("M-4", 3, 0);
 | 
						|
  ok(key == 4, "M-4 registered");
 | 
						|
  key= register_mutex_class("M-5", 3, 0);
 | 
						|
  ok(key == 5, "M-5 registered");
 | 
						|
  ok(mutex_class_lost == 0, "lost nothing");
 | 
						|
  key= register_mutex_class("M-6", 3, 0);
 | 
						|
  ok(key == 0, "M-6 not registered");
 | 
						|
  ok(mutex_class_lost == 1, "lost 1 mutex");
 | 
						|
  key= register_mutex_class("M-7", 3, 0);
 | 
						|
  ok(key == 0, "M-7 not registered");
 | 
						|
  ok(mutex_class_lost == 2, "lost 2 mutex");
 | 
						|
  key= register_mutex_class("M-3", 3, 0);
 | 
						|
  ok(key == 3, "M-3 re registered");
 | 
						|
  ok(mutex_class_lost == 2, "lost 2 mutex");
 | 
						|
  key= register_mutex_class("M-5", 3, 0);
 | 
						|
  ok(key == 5, "M-5 re registered");
 | 
						|
  ok(mutex_class_lost == 2, "lost 2 mutex");
 | 
						|
 | 
						|
  mutex= find_mutex_class(0);
 | 
						|
  ok(mutex == NULL, "no key 0");
 | 
						|
  mutex= find_mutex_class(3);
 | 
						|
  ok(mutex != NULL, "found key 3");
 | 
						|
  ok(strncmp(mutex->m_name, "M-3", 3) == 0, "key 3 is M-3");
 | 
						|
  ok(mutex->m_name_length == 3, "name length 3");
 | 
						|
  mutex= find_mutex_class(9999);
 | 
						|
  ok(mutex == NULL, "no key 9999");
 | 
						|
 | 
						|
  cleanup_sync_class();
 | 
						|
}
 | 
						|
 | 
						|
void test_rwlock_registration()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_sync_key key;
 | 
						|
  PFS_rwlock_class *rwlock;
 | 
						|
 | 
						|
  rc= init_sync_class(0, 5, 0);
 | 
						|
  ok(rc == 0, "room for 5 rwlock");
 | 
						|
 | 
						|
  key= register_rwlock_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo registered");
 | 
						|
  key= register_rwlock_class("BAR", 3, 0);
 | 
						|
  ok(key == 2, "bar registered");
 | 
						|
  key= register_rwlock_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo re registered");
 | 
						|
  key= register_rwlock_class("RW-3", 4, 0);
 | 
						|
  ok(key == 3, "RW-3 registered");
 | 
						|
  key= register_rwlock_class("RW-4", 4, 0);
 | 
						|
  ok(key == 4, "RW-4 registered");
 | 
						|
  key= register_rwlock_class("RW-5", 4, 0);
 | 
						|
  ok(key == 5, "RW-5 registered");
 | 
						|
  key= register_rwlock_class("RW-6", 4, 0);
 | 
						|
  ok(key == 0, "RW-6 not registered");
 | 
						|
  key= register_rwlock_class("RW-7", 4, 0);
 | 
						|
  ok(key == 0, "RW-7 not registered");
 | 
						|
  key= register_rwlock_class("RW-3", 4, 0);
 | 
						|
  ok(key == 3, "RW-3 re registered");
 | 
						|
  key= register_rwlock_class("RW-5", 4, 0);
 | 
						|
  ok(key == 5, "RW-5 re registered");
 | 
						|
 | 
						|
  rwlock= find_rwlock_class(0);
 | 
						|
  ok(rwlock == NULL, "no key 0");
 | 
						|
  rwlock= find_rwlock_class(3);
 | 
						|
  ok(rwlock != NULL, "found key 3");
 | 
						|
  ok(strncmp(rwlock->m_name, "RW-3", 4) == 0, "key 3 is RW-3");
 | 
						|
  ok(rwlock->m_name_length == 4, "name length 4");
 | 
						|
  rwlock= find_rwlock_class(9999);
 | 
						|
  ok(rwlock == NULL, "no key 9999");
 | 
						|
 | 
						|
  cleanup_sync_class();
 | 
						|
}
 | 
						|
 | 
						|
void test_cond_registration()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_sync_key key;
 | 
						|
  PFS_cond_class *cond;
 | 
						|
 | 
						|
  rc= init_sync_class(0, 0, 5);
 | 
						|
  ok(rc == 0, "room for 5 cond");
 | 
						|
 | 
						|
  key= register_cond_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo registered");
 | 
						|
  key= register_cond_class("BAR", 3, 0);
 | 
						|
  ok(key == 2, "bar registered");
 | 
						|
  key= register_cond_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo re registered");
 | 
						|
  key= register_cond_class("C-3", 3, 0);
 | 
						|
  ok(key == 3, "C-3 registered");
 | 
						|
  key= register_cond_class("C-4", 3, 0);
 | 
						|
  ok(key == 4, "C-4 registered");
 | 
						|
  key= register_cond_class("C-5", 3, 0);
 | 
						|
  ok(key == 5, "C-5 registered");
 | 
						|
  key= register_cond_class("C-6", 3, 0);
 | 
						|
  ok(key == 0, "C-6 not registered");
 | 
						|
  key= register_cond_class("C-7", 3, 0);
 | 
						|
  ok(key == 0, "C-7 not registered");
 | 
						|
  key= register_cond_class("C-3", 3, 0);
 | 
						|
  ok(key == 3, "C-3 re registered");
 | 
						|
  key= register_cond_class("C-5", 3, 0);
 | 
						|
  ok(key == 5, "C-5 re registered");
 | 
						|
 | 
						|
  cond= find_cond_class(0);
 | 
						|
  ok(cond == NULL, "no key 0");
 | 
						|
  cond= find_cond_class(3);
 | 
						|
  ok(cond != NULL, "found key 3");
 | 
						|
  ok(strncmp(cond->m_name, "C-3", 3) == 0, "key 3 is C-3");
 | 
						|
  ok(cond->m_name_length == 3, "name length 3");
 | 
						|
  cond= find_cond_class(9999);
 | 
						|
  ok(cond == NULL, "no key 9999");
 | 
						|
 | 
						|
  cleanup_sync_class();
 | 
						|
}
 | 
						|
 | 
						|
void test_thread_registration()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_thread_key key;
 | 
						|
  PFS_thread_class *thread;
 | 
						|
 | 
						|
  rc= init_thread_class(5);
 | 
						|
  ok(rc == 0, "room for 5 thread");
 | 
						|
 | 
						|
  key= register_thread_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo registered");
 | 
						|
  key= register_thread_class("BAR", 3, 0);
 | 
						|
  ok(key == 2, "bar registered");
 | 
						|
  key= register_thread_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo re registered");
 | 
						|
  key= register_thread_class("Thread-3", 8, 0);
 | 
						|
  ok(key == 3, "Thread-3 registered");
 | 
						|
  key= register_thread_class("Thread-4", 8, 0);
 | 
						|
  ok(key == 4, "Thread-4 registered");
 | 
						|
  key= register_thread_class("Thread-5", 8, 0);
 | 
						|
  ok(key == 5, "Thread-5 registered");
 | 
						|
  key= register_thread_class("Thread-6", 8, 0);
 | 
						|
  ok(key == 0, "Thread-6 not registered");
 | 
						|
  key= register_thread_class("Thread-7", 8, 0);
 | 
						|
  ok(key == 0, "Thread-7 not registered");
 | 
						|
  key= register_thread_class("Thread-3", 8, 0);
 | 
						|
  ok(key == 3, "Thread-3 re registered");
 | 
						|
  key= register_thread_class("Thread-5", 8, 0);
 | 
						|
  ok(key == 5, "Thread-5 re registered");
 | 
						|
 | 
						|
  thread= find_thread_class(0);
 | 
						|
  ok(thread == NULL, "no key 0");
 | 
						|
  thread= find_thread_class(3);
 | 
						|
  ok(thread != NULL, "found key 3");
 | 
						|
  ok(strncmp(thread->m_name, "Thread-3", 8) == 0, "key 3 is Thread-3");
 | 
						|
  ok(thread->m_name_length == 8, "name length 8");
 | 
						|
  thread= find_thread_class(9999);
 | 
						|
  ok(thread == NULL, "no key 9999");
 | 
						|
 | 
						|
  cleanup_thread_class();
 | 
						|
}
 | 
						|
 | 
						|
void test_file_registration()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_file_key key;
 | 
						|
  PFS_file_class *file;
 | 
						|
 | 
						|
  rc= init_file_class(5);
 | 
						|
  ok(rc == 0, "room for 5 file");
 | 
						|
 | 
						|
  key= register_file_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo registered");
 | 
						|
  key= register_file_class("BAR", 3, 0);
 | 
						|
  ok(key == 2, "bar registered");
 | 
						|
  key= register_file_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo re registered");
 | 
						|
  key= register_file_class("File-3", 6, 0);
 | 
						|
  ok(key == 3, "File-3 registered");
 | 
						|
  key= register_file_class("File-4", 6, 0);
 | 
						|
  ok(key == 4, "File-4 registered");
 | 
						|
  key= register_file_class("File-5", 6, 0);
 | 
						|
  ok(key == 5, "File-5 registered");
 | 
						|
  key= register_file_class("File-6", 6, 0);
 | 
						|
  ok(key == 0, "File-6 not registered");
 | 
						|
  key= register_file_class("File-7", 6, 0);
 | 
						|
  ok(key == 0, "File-7 not registered");
 | 
						|
  key= register_file_class("File-3", 6, 0);
 | 
						|
  ok(key == 3, "File-3 re registered");
 | 
						|
  key= register_file_class("File-5", 6, 0);
 | 
						|
  ok(key == 5, "File-5 re registered");
 | 
						|
 | 
						|
  file= find_file_class(0);
 | 
						|
  ok(file == NULL, "no key 0");
 | 
						|
  file= find_file_class(3);
 | 
						|
  ok(file != NULL, "found key 3");
 | 
						|
  ok(strncmp(file->m_name, "File-3", 6) == 0, "key 3 is File-3");
 | 
						|
  ok(file->m_name_length == 6, "name length 6");
 | 
						|
  file= find_file_class(9999);
 | 
						|
  ok(file == NULL, "no key 9999");
 | 
						|
 | 
						|
  cleanup_file_class();
 | 
						|
}
 | 
						|
 | 
						|
void test_socket_registration()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_socket_key key;
 | 
						|
  PFS_socket_class *socket;
 | 
						|
 | 
						|
  rc= init_socket_class(5);
 | 
						|
  ok(rc == 0, "room for 5 socket");
 | 
						|
 | 
						|
  key= register_socket_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo registered");
 | 
						|
  key= register_socket_class("BAR", 3, 0);
 | 
						|
  ok(key == 2, "bar registered");
 | 
						|
  key= register_socket_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo re registered");
 | 
						|
  key= register_socket_class("Socket-3", 8, 0);
 | 
						|
  ok(key == 3, "Socket-3 registered");
 | 
						|
  key= register_socket_class("Socket-4", 8, 0);
 | 
						|
  ok(key == 4, "Socket-4 registered");
 | 
						|
  key= register_socket_class("Socket-5", 8, 0);
 | 
						|
  ok(key == 5, "Socket-5 registered");
 | 
						|
  ok(socket_class_lost == 0, "lost nothing");
 | 
						|
  key= register_socket_class("Socket-6", 8, 0);
 | 
						|
  ok(key == 0, "Socket-6 not registered");
 | 
						|
  ok(socket_class_lost == 1, "lost 1 socket");
 | 
						|
  key= register_socket_class("Socket-7", 8, 0);
 | 
						|
  ok(key == 0, "Socket-7 not registered");
 | 
						|
  ok(socket_class_lost == 2, "lost 2 socket");
 | 
						|
  key= register_socket_class("Socket-3", 8, 0);
 | 
						|
  ok(key == 3, "Socket-3 re registered");
 | 
						|
  ok(socket_class_lost == 2, "lost 2 socket");
 | 
						|
  key= register_socket_class("Socket-5", 8, 0);
 | 
						|
  ok(key == 5, "Socket-5 re registered");
 | 
						|
  ok(socket_class_lost == 2, "lost 2 socket");
 | 
						|
 | 
						|
  socket= find_socket_class(0);
 | 
						|
  ok(socket == NULL, "no key 0");
 | 
						|
  socket= find_socket_class(3);
 | 
						|
  ok(socket != NULL, "found key 3");
 | 
						|
  ok(strncmp(socket->m_name, "Socket-3", 8) == 0, "key 3 is Socket-3");
 | 
						|
  ok(socket->m_name_length == 8, "name length 3");
 | 
						|
  socket= find_socket_class(9999);
 | 
						|
  ok(socket == NULL, "no key 9999");
 | 
						|
 | 
						|
  cleanup_socket_class();
 | 
						|
}
 | 
						|
 | 
						|
void test_table_registration()
 | 
						|
{
 | 
						|
#ifdef LATER
 | 
						|
  PFS_table_share *table_share;
 | 
						|
  PFS_table_share *table_share_2;
 | 
						|
 | 
						|
  PFS_thread fake_thread;
 | 
						|
  fake_thread.m_table_share_hash_pins= NULL;
 | 
						|
 | 
						|
  table_share_lost= 0;
 | 
						|
  table_share= find_or_create_table_share(& fake_thread, false, "db1", 3, "t1", 2);
 | 
						|
  ok(table_share == NULL, "not created");
 | 
						|
  ok(table_share_lost == 1, "lost the table");
 | 
						|
 | 
						|
  table_share_lost= 0;
 | 
						|
  init_table_share(5);
 | 
						|
  init_table_share_hash();
 | 
						|
 | 
						|
  table_share= find_or_create_table_share(& fake_thread, false, "db1", 3, "t1", 2);
 | 
						|
  ok(table_share != NULL, "created db1.t1");
 | 
						|
  ok(table_share_lost == 0, "not lost");
 | 
						|
 | 
						|
  table_share_2= find_or_create_table_share(& fake_thread, false, "db1", 3, "t1", 2);
 | 
						|
  ok(table_share_2 != NULL, "found db1.t1");
 | 
						|
  ok(table_share_lost == 0, "not lost");
 | 
						|
  ok(table_share == table_share_2, "same table");
 | 
						|
 | 
						|
  table_share_2= find_or_create_table_share(& fake_thread, false, "db1", 3, "t2", 2);
 | 
						|
  ok(table_share_2 != NULL, "created db1.t2");
 | 
						|
  ok(table_share_lost == 0, "not lost");
 | 
						|
 | 
						|
  table_share_2= find_or_create_table_share(& fake_thread, false, "db2", 3, "t1", 2);
 | 
						|
  ok(table_share_2 != NULL, "created db2.t1");
 | 
						|
  ok(table_share_lost == 0, "not lost");
 | 
						|
 | 
						|
  table_share_2= find_or_create_table_share(& fake_thread, false, "db2", 3, "t2", 2);
 | 
						|
  ok(table_share_2 != NULL, "created db2.t2");
 | 
						|
  ok(table_share_lost == 0, "not lost");
 | 
						|
 | 
						|
  table_share_2= find_or_create_table_share(& fake_thread, false, "db3", 3, "t3", 2);
 | 
						|
  ok(table_share_2 != NULL, "created db3.t3");
 | 
						|
  ok(table_share_lost == 0, "not lost");
 | 
						|
 | 
						|
  table_share_2= find_or_create_table_share(& fake_thread, false, "db4", 3, "t4", 2);
 | 
						|
  ok(table_share_2 == NULL, "lost db4.t4");
 | 
						|
  ok(table_share_lost == 1, "lost");
 | 
						|
 | 
						|
  table_share_lost= 0;
 | 
						|
  table_share_2= find_or_create_table_share(& fake_thread, false, "db1", 3, "t2", 2);
 | 
						|
  ok(table_share_2 != NULL, "found db1.t2");
 | 
						|
  ok(table_share_lost == 0, "not lost");
 | 
						|
  ok(strncmp(table_share_2->m_schema_name, "db1", 3) == 0 , "schema db1");
 | 
						|
  ok(table_share_2->m_schema_name_length == 3, "length 3");
 | 
						|
  ok(strncmp(table_share_2->m_table_name, "t2", 2) == 0 , "table t2");
 | 
						|
  ok(table_share_2->m_table_name_length == 2, "length 2");
 | 
						|
 | 
						|
  cleanup_table_share_hash();
 | 
						|
  cleanup_table_share();
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
void test_memory_registration()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_memory_key key;
 | 
						|
  PFS_memory_class *memory;
 | 
						|
 | 
						|
  rc= init_memory_class(5);
 | 
						|
  ok(rc == 0, "room for 5 memory");
 | 
						|
 | 
						|
  key= register_memory_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo registered");
 | 
						|
  key= register_memory_class("BAR", 3, 0);
 | 
						|
  ok(key == 2, "bar registered");
 | 
						|
  key= register_memory_class("FOO", 3, 0);
 | 
						|
  ok(key == 1, "foo re registered");
 | 
						|
  key= register_memory_class("Memory-3", 8, 0);
 | 
						|
  ok(key == 3, "Memory-3 registered");
 | 
						|
  key= register_memory_class("Memory-4", 8, 0);
 | 
						|
  ok(key == 4, "Memory-4 registered");
 | 
						|
  key= register_memory_class("Memory-5", 8, 0);
 | 
						|
  ok(key == 5, "Memory-5 registered");
 | 
						|
  ok(memory_class_lost == 0, "lost nothing");
 | 
						|
  key= register_memory_class("Memory-6", 8, 0);
 | 
						|
  ok(key == 0, "Memory-6 not registered");
 | 
						|
  ok(memory_class_lost == 1, "lost 1 memory");
 | 
						|
  key= register_memory_class("Memory-7", 8, 0);
 | 
						|
  ok(key == 0, "Memory-7 not registered");
 | 
						|
  ok(memory_class_lost == 2, "lost 2 memory");
 | 
						|
  key= register_memory_class("Memory-3", 8, 0);
 | 
						|
  ok(key == 3, "Memory-3 re registered");
 | 
						|
  ok(memory_class_lost == 2, "lost 2 memory");
 | 
						|
  key= register_memory_class("Memory-5", 8, 0);
 | 
						|
  ok(key == 5, "Memory-5 re registered");
 | 
						|
  ok(memory_class_lost == 2, "lost 2 memory");
 | 
						|
 | 
						|
  memory= find_memory_class(0);
 | 
						|
  ok(memory == NULL, "no key 0");
 | 
						|
  memory= find_memory_class(3);
 | 
						|
  ok(memory != NULL, "found key 3");
 | 
						|
  ok(strncmp(memory->m_name, "Memory-3", 8) == 0, "key 3 is Memory-3");
 | 
						|
  ok(memory->m_name_length == 8, "name length 3");
 | 
						|
  memory= find_memory_class(9999);
 | 
						|
  ok(memory == NULL, "no key 9999");
 | 
						|
 | 
						|
  cleanup_memory_class();
 | 
						|
}
 | 
						|
 | 
						|
#ifdef LATER
 | 
						|
void set_wait_stat(PFS_instr_class *klass)
 | 
						|
{
 | 
						|
  PFS_single_stat *stat;
 | 
						|
  stat= & global_instr_class_waits_array[klass->m_event_name_index];
 | 
						|
 | 
						|
  stat->m_count= 12;
 | 
						|
  stat->m_min= 5;
 | 
						|
  stat->m_max= 120;
 | 
						|
  stat->m_sum= 999;
 | 
						|
}
 | 
						|
 | 
						|
bool is_empty_stat(PFS_instr_class *klass)
 | 
						|
{
 | 
						|
  PFS_single_stat *stat;
 | 
						|
  stat= & global_instr_class_waits_array[klass->m_event_name_index];
 | 
						|
 | 
						|
  if (stat->m_count != 0)
 | 
						|
    return false;
 | 
						|
  if (stat->m_min != (ulonglong) -1)
 | 
						|
    return false;
 | 
						|
  if (stat->m_max != 0)
 | 
						|
    return false;
 | 
						|
  if (stat->m_sum != 0)
 | 
						|
    return false;
 | 
						|
  return true;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
void test_instruments_reset()
 | 
						|
{
 | 
						|
  int rc;
 | 
						|
  PFS_sync_key key;
 | 
						|
  PFS_file_key file_key;
 | 
						|
  PFS_socket_key socket_key;
 | 
						|
  PFS_mutex_class *mutex_1;
 | 
						|
  PFS_mutex_class *mutex_2;
 | 
						|
  PFS_mutex_class *mutex_3;
 | 
						|
  PFS_rwlock_class *rwlock_1;
 | 
						|
  PFS_rwlock_class *rwlock_2;
 | 
						|
  PFS_rwlock_class *rwlock_3;
 | 
						|
  PFS_cond_class *cond_1;
 | 
						|
  PFS_cond_class *cond_2;
 | 
						|
  PFS_cond_class *cond_3;
 | 
						|
  PFS_file_class *file_1;
 | 
						|
  PFS_file_class *file_2;
 | 
						|
  PFS_file_class *file_3;
 | 
						|
  PFS_socket_class *socket_1;
 | 
						|
  PFS_socket_class *socket_2;
 | 
						|
  PFS_socket_class *socket_3;
 | 
						|
 | 
						|
  rc= init_sync_class(3, 3, 3);
 | 
						|
  ok(rc == 0, "init (sync)");
 | 
						|
  rc= init_thread_class(3);
 | 
						|
  ok(rc == 0, "init (thread)");
 | 
						|
  rc= init_file_class(3);
 | 
						|
  ok(rc == 0, "init (file)");
 | 
						|
  rc= init_socket_class(3);
 | 
						|
  ok(rc == 0, "init (socket)");
 | 
						|
 | 
						|
  key= register_mutex_class("M-1", 3, 0);
 | 
						|
  ok(key == 1, "mutex registered");
 | 
						|
  key= register_mutex_class("M-2", 3, 0);
 | 
						|
  ok(key == 2, "mutex registered");
 | 
						|
  key= register_mutex_class("M-3", 3, 0);
 | 
						|
  ok(key == 3, "mutex registered");
 | 
						|
 | 
						|
  key= register_rwlock_class("RW-1", 4, 0);
 | 
						|
  ok(key == 1, "rwlock registered");
 | 
						|
  key= register_rwlock_class("RW-2", 4, 0);
 | 
						|
  ok(key == 2, "rwlock registered");
 | 
						|
  key= register_rwlock_class("RW-3", 4, 0);
 | 
						|
  ok(key == 3, "rwlock registered");
 | 
						|
 | 
						|
  key= register_cond_class("C-1", 3, 0);
 | 
						|
  ok(key == 1, "cond registered");
 | 
						|
  key= register_cond_class("C-2", 3, 0);
 | 
						|
  ok(key == 2, "cond registered");
 | 
						|
  key= register_cond_class("C-3", 3, 0);
 | 
						|
  ok(key == 3, "cond registered");
 | 
						|
 | 
						|
  file_key= register_file_class("F-1", 3, 0);
 | 
						|
  ok(file_key == 1, "file registered");
 | 
						|
  file_key= register_file_class("F-2", 3, 0);
 | 
						|
  ok(file_key == 2, "file registered");
 | 
						|
  file_key= register_file_class("F-3", 3, 0);
 | 
						|
  ok(file_key == 3, "file registered");
 | 
						|
 | 
						|
  socket_key= register_socket_class("S-1", 3, 0);
 | 
						|
  ok(socket_key == 1, "socket registered");
 | 
						|
  socket_key= register_socket_class("S-2", 3, 0);
 | 
						|
  ok(socket_key == 2, "socket registered");
 | 
						|
  socket_key= register_socket_class("S-3", 3, 0);
 | 
						|
  ok(socket_key == 3, "socket registered");
 | 
						|
 | 
						|
  mutex_1= find_mutex_class(1);
 | 
						|
  ok(mutex_1 != NULL, "mutex key 1");
 | 
						|
  mutex_2= find_mutex_class(2);
 | 
						|
  ok(mutex_2 != NULL, "mutex key 2");
 | 
						|
  mutex_3= find_mutex_class(3);
 | 
						|
  ok(mutex_3 != NULL, "mutex key 3");
 | 
						|
 | 
						|
  rwlock_1= find_rwlock_class(1);
 | 
						|
  ok(rwlock_1 != NULL, "rwlock key 1");
 | 
						|
  rwlock_2= find_rwlock_class(2);
 | 
						|
  ok(rwlock_2 != NULL, "rwlock key 2");
 | 
						|
  rwlock_3= find_rwlock_class(3);
 | 
						|
  ok(rwlock_3 != NULL, "rwlock key 3");
 | 
						|
 | 
						|
  cond_1= find_cond_class(1);
 | 
						|
  ok(cond_1 != NULL, "cond key 1");
 | 
						|
  cond_2= find_cond_class(2);
 | 
						|
  ok(cond_2 != NULL, "cond key 2");
 | 
						|
  cond_3= find_cond_class(3);
 | 
						|
  ok(cond_3 != NULL, "cond key 3");
 | 
						|
 | 
						|
  file_1= find_file_class(1);
 | 
						|
  ok(file_1 != NULL, "file key 1");
 | 
						|
  file_2= find_file_class(2);
 | 
						|
  ok(file_2 != NULL, "file key 2");
 | 
						|
  file_3= find_file_class(3);
 | 
						|
  ok(file_3 != NULL, "file key 3");
 | 
						|
 | 
						|
  socket_1= find_socket_class(1);
 | 
						|
  ok(socket_1 != NULL, "socket key 1");
 | 
						|
  socket_2= find_socket_class(2);
 | 
						|
  ok(socket_2 != NULL, "socket key 2");
 | 
						|
  socket_3= find_socket_class(3);
 | 
						|
  ok(socket_3 != NULL, "socket key 3");
 | 
						|
 | 
						|
#ifdef LATER
 | 
						|
  set_wait_stat(mutex_1);
 | 
						|
  set_wait_stat(mutex_2);
 | 
						|
  set_wait_stat(mutex_3);
 | 
						|
  set_wait_stat(rwlock_1);
 | 
						|
  set_wait_stat(rwlock_2);
 | 
						|
  set_wait_stat(rwlock_3);
 | 
						|
  set_wait_stat(cond_1);
 | 
						|
  set_wait_stat(cond_2);
 | 
						|
  set_wait_stat(cond_3);
 | 
						|
  set_wait_stat(file_1);
 | 
						|
  set_wait_stat(file_2);
 | 
						|
  set_wait_stat(file_3);
 | 
						|
 | 
						|
  ok(! is_empty_stat(mutex_1), "mutex_1 stat is populated");
 | 
						|
  ok(! is_empty_stat(mutex_2), "mutex_2 stat is populated");
 | 
						|
  ok(! is_empty_stat(mutex_3), "mutex_3 stat is populated");
 | 
						|
  ok(! is_empty_stat(rwlock_1), "rwlock_1 stat is populated");
 | 
						|
  ok(! is_empty_stat(rwlock_2), "rwlock_2 stat is populated");
 | 
						|
  ok(! is_empty_stat(rwlock_3), "rwlock_3 stat is populated");
 | 
						|
  ok(! is_empty_stat(cond_1), "cond_1 stat is populated");
 | 
						|
  ok(! is_empty_stat(cond_2), "cond_2 stat is populated");
 | 
						|
  ok(! is_empty_stat(cond_3), "cond_3 stat is populated");
 | 
						|
  ok(! is_empty_stat(file_1), "file_1 stat is populated");
 | 
						|
  ok(! is_empty_stat(file_2), "file_2 stat is populated");
 | 
						|
  ok(! is_empty_stat(file_3), "file_3 stat is populated");
 | 
						|
 | 
						|
  reset_global_wait_stat();
 | 
						|
 | 
						|
  ok(is_empty_stat(mutex_1), "mutex_1 stat is cleared");
 | 
						|
  ok(is_empty_stat(mutex_2), "mutex_2 stat is cleared");
 | 
						|
  ok(is_empty_stat(mutex_3), "mutex_3 stat is cleared");
 | 
						|
  ok(is_empty_stat(rwlock_1), "rwlock_1 stat is cleared");
 | 
						|
  ok(is_empty_stat(rwlock_2), "rwlock_2 stat is cleared");
 | 
						|
  ok(is_empty_stat(rwlock_3), "rwlock_3 stat is cleared");
 | 
						|
  ok(is_empty_stat(cond_1), "cond_1 stat is cleared");
 | 
						|
  ok(is_empty_stat(cond_2), "cond_2 stat is cleared");
 | 
						|
  ok(is_empty_stat(cond_3), "cond_3 stat is cleared");
 | 
						|
  ok(is_empty_stat(file_1), "file_1 stat is cleared");
 | 
						|
  ok(is_empty_stat(file_2), "file_2 stat is cleared");
 | 
						|
  ok(is_empty_stat(file_3), "file_3 stat is cleared");
 | 
						|
#endif
 | 
						|
 | 
						|
  cleanup_sync_class();
 | 
						|
  cleanup_file_class();
 | 
						|
  cleanup_socket_class();
 | 
						|
}
 | 
						|
 | 
						|
void do_all_tests()
 | 
						|
{
 | 
						|
  test_no_registration();
 | 
						|
  test_mutex_registration();
 | 
						|
  test_rwlock_registration();
 | 
						|
  test_cond_registration();
 | 
						|
  test_thread_registration();
 | 
						|
  test_file_registration();
 | 
						|
  test_socket_registration();
 | 
						|
  test_table_registration();
 | 
						|
  test_memory_registration();
 | 
						|
  test_instruments_reset();
 | 
						|
}
 | 
						|
 | 
						|
int main(int argc, char **argv)
 | 
						|
{
 | 
						|
  plan(209);
 | 
						|
  pfs_enabled= 1;
 | 
						|
  MY_INIT(argv[0]);
 | 
						|
  do_all_tests();
 | 
						|
  my_end(0);
 | 
						|
  return (exit_status());
 | 
						|
}
 |