/*
* test_pool.cj - 连接池测试
*/
package tybb2026::tycj_orm
import std.unittest.*
// ============================================================================
// 连接池配置测试
// ============================================================================
@test
func testPoolConfig(): Unit {
let config = PoolConfig()
config.setMinPoolSize(2)
config.setMaxPoolSize(10)
config.setConnectionTimeout(5000)
assert(config.minPoolSize == 2)
assert(config.maxPoolSize == 10)
assert(config.connectionTimeout == 5000)
}
@test
func testConnectionPoolFactory(): Unit {
let pool = ConnectionPoolFactory.createMockPool()
assert(pool is ConnectionPool)
// 测试获取连接
let connOpt = pool.getConnection()
assert(connOpt.isSome())
// 测试归还连接
match (connOpt) {
case Some(conn) => pool.returnConnection(conn)
case None => ()
}
pool.close()
}
@test
func testPoolStats(): Unit {
let pool = ConnectionPoolFactory.createMockPool()
let active = pool.getActiveConnections()
let idle = pool.getIdleConnections()
let total = pool.getTotalConnections()
assert(active >= 0)
assert(idle >= 0)
assert(total == active + idle)
pool.close()
}
@test
func testPoolHealthCheck(): Unit {
let pool = ConnectionPoolFactory.createMockPool()
let checker = ConnectionPoolHealthChecker(pool)
let health = checker.checkHealth()
assert(health.healthy || !health.issues.isEmpty())
assert(health.totalConnections >= 0)
pool.close()
}
@test
func testConnectionPoolClose(): Unit {
let pool = ConnectionPoolFactory.createMockPool()
// 获取一个连接
let connOpt = pool.getConnection()
// 关闭连接池
pool.close()
// 关闭后应该无法获取新连接
let connOpt2 = pool.getConnection()
assert(connOpt2.isNone())
}
// ============================================================================
// 数据库配置测试
// ============================================================================
@test
func testMySqlConfig(): Unit {
let config = DatabaseConfig.mysql()
config.host = "localhost"
config.port = 3306
config.database = "test"
config.username = "root"
config.password = "password"
assert(config.dbType == DatabaseType.MySql)
assert(config.port == 3306)
let url = config.buildUrl()
assert(url.contains("mysql"))
}
@test
func testSqliteConfig(): Unit {
let config = DatabaseConfig.sqlite()
config.database = "test.db"
assert(config.dbType == DatabaseType.Sqlite)
let url = config.buildUrl()
assert(url.contains("sqlite"))
}
// ============================================================================
// Mock 连接测试
// ============================================================================
@test
func testMockConnection(): Unit {
let conn = MockConnection()
// 测试创建预编译语句
let stmt = conn.prepareStatement("SELECT * FROM users")
assert(stmt is PreparedStatement)
// 测试事务操作
conn.commit()
conn.rollback()
// 测试关闭
conn.close()
}
@test
func testMockPreparedStatement(): Unit {
let stmt = MockPreparedStatement(sql: "SELECT * FROM users WHERE id = ?")
// 测试设置参数
stmt.setInt(1, 123)
stmt.setString(2, "test")
stmt.setBool(3, true)
stmt.setFloat(4, 3.14)
// 测试执行
let rs = stmt.executeQuery()
assert(rs is ResultSet)
let rows = stmt.executeUpdate()
assert(rows >= 0)
stmt.close()
}
@test
func testMockResultSet(): Unit {
let data = ArrayList<HashMap<String, String>>()
let row = HashMap<String, String>()
row["id"] = "1"
row["name"] = "John"
data.add(row)
let rs = MockResultSet(data: data)
assert(rs.next())
assert(rs.getString("name") == "John")
assert(rs.getInt("id") == 1)
assert(!rs.isNull("name"))
rs.close()
}