Skip to content

Commit

Permalink
updated the integration test
Browse files Browse the repository at this point in the history
  • Loading branch information
Vivek Yadav committed Jan 3, 2025
1 parent 32d4a47 commit ee9edeb
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 35 deletions.
9 changes: 5 additions & 4 deletions test_data/mysql_checkconstraint_dump.test.out
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,13 @@ CREATE TABLE `TestTable` (
`EnumValue` enum('OptionA','OptionB','OptionC') DEFAULT NULL,
`BooleanValue` tinyint DEFAULT NULL,
PRIMARY KEY (`ID`),
CONSTRAINT `chk_bitwise` CHECK (((`Value` & 2) = 0)),
CONSTRAINT `chk_Boolean` CHECK ((`BooleanValue` in (0,1))),
CONSTRAINT `chk_DateRange` CHECK ((`Date` between _utf8mb4'2000-01-01 00:00:00' and _utf8mb4'2100-12-31 23:59:59')),
CONSTRAINT `chk_Enum` CHECK ((`EnumValue` in (_utf8mb4'OptionA',_utf8mb4'OptionB',_utf8mb4'OptionC'))),
CONSTRAINT `chk_NullValue` CHECK ((`Value` is not null)),
CONSTRAINT `chk_PositiveValue` CHECK ((`Value` >= 0)),
CONSTRAINT `chk_StringLength` CHECK ((char_length(`Name`) > 5)),
CONSTRAINT `chk_range` CHECK (((`Value` > 10) and (`Value` < 1000))),
CONSTRAINT `chk_StringLength` CHECK ((char_length(`Name`) > 5))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

Expand All @@ -53,7 +55,6 @@ CREATE TABLE `TestTable` (

LOCK TABLES `TestTable` WRITE;
/*!40000 ALTER TABLE `TestTable` DISABLE KEYS */;
INSERT INTO `TestTable` VALUES (1, 12, 0,'Mr. Smith', 'OptionA', 1);
/*!40000 ALTER TABLE `TestTable` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
Expand All @@ -66,4 +67,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2024-12-27 11:20:12
-- Dump completed on 2025-01-03 17:40:48
103 changes: 72 additions & 31 deletions testing/mysql/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -337,108 +337,149 @@ func checkCheckConstraints(ctx context.Context, t *testing.T, dbURI string) {
Name STRING(MAX),
EnumValue STRING(MAX),
BooleanValue INT64,
CONSTRAINT chk_PositiveValue CHECK (Value >= 0),
CONSTRAINT chk_NullValue CHECK (Value IS NOT NULL),
CONSTRAINT chk_range CHECK ( Value > 10 AND Value < 1000 ),
CONSTRAINT chk_StringLength CHECK (LENGTH(Name) > 5),
CONSTRAINT chk_Enum CHECK (EnumValue IN ('OptionA', 'OptionB', 'OptionC')),
CONSTRAINT chk_Boolean CHECK (BooleanValue IN (0, 1)),
CONSTRAINT chk_bitwise CHECK ((Value & 2) = 0),
CONSTRAINT chk_DateRange CHECK (Date BETWEEN '2000-01-01 00:00:00' AND '2100-12-31 23:59:59')
) PRIMARY KEY (ID)`)

// Test Case 1: Valid Insert for chk_PositiveValue
// Test Case 1: Valid Insert for chk_range/chk_DateRange
err = insertOrUpdateData(map[string]interface{}{
"ID": 1,
"Value": 5,
"Value": 12,
"Flag": false,
"Date": time.Now(),
"Name": "ValidName",
"EnumValue": "OptionA",
"BooleanValue": 1,
})
if err != nil {
t.Fatalf("Failed to insert valid data for chk_PositiveValue: %v", err)
t.Fatalf("Failed to insert valid data for chk_range/chk_DateRange: %v", err)
}

// Test Case 2: Invalid Insert for chk_PositiveValue (Negative Value)
checkConstraintViolation(map[string]interface{}{
// Test Case 2: Valid Insert for chk_bitwise
err = insertOrUpdateData(map[string]interface{}{
"ID": 2,
"Name": "ValidName",
"Flag": false,
"Value": 12, // valid value
})

if err != nil {
t.Fatalf("Failed to insert valid data for chk_bitwise: %v", err)
}

// Test Case 3: Invalid Insert for chk_bitwise (Negative Value)
checkConstraintViolation(map[string]interface{}{
"ID": 3,
"Value": -1, // Value < 0
"Flag": false,
}, "chk_PositiveValue")
}, "chk_bitwise")

// Test Case 4: Invalid Insert for chk_DateRange (Negative Value)
checkConstraintViolation(map[string]interface{}{
"ID": 4,
"Value": 12,
"Date": time.Date(1999, 12, 31, 23, 59, 59, 0, time.UTC),
"Flag": false,
}, "chk_DateRange")

// Test Case 7: Valid Insert for chk_NullValue (Value is not NULL)
// Test Case 5: Valid Insert for chk_NullValue (Value is not NULL)
err = insertOrUpdateData(map[string]interface{}{
"ID": 7,
"Value": 10, // Value is not NULL
"ID": 5,
"Value": 12, // Value is not NULL
"Flag": false,
})
if err != nil {
t.Fatalf("Failed to insert valid data for chk_NullValue: %v", err)
}

// Test Case 8: Invalid Insert for chk_NullValue (NULL Value)
// Test Case 6: Invalid Insert for chk_NullValue (NULL Value)
checkConstraintViolation(map[string]interface{}{
"ID": 8,
"ID": 6,
"Value": nil, // NULL Value is not allowed
"Flag": false,
}, "chk_NullValue")

// Test Case 9: Valid Insert for chk_StringLength (Name length > 5)
// Test Case 7: Valid Insert for chk_StringLength (Name length > 5)
err = insertOrUpdateData(map[string]interface{}{
"ID": 9,
"ID": 7,
"Name": "ValidName", // Name length > 5
"Flag": false,
"Value": 10,
"Value": 12,
})
if err != nil {
t.Fatalf("Failed to insert valid data for chk_StringLength: %v", err)
}

// Test Case 10: Invalid Insert for chk_StringLength (Name length <= 5)
// Test Case 8: Invalid Insert for chk_StringLength (Name length <= 5)
checkConstraintViolation(map[string]interface{}{
"ID": 10,
"ID": 8,
"Name": "Test", // Name length <= 5
"Flag": false,
"Value": 10,
"Value": 12,
}, "chk_StringLength")

// Test Case 11: Valid Insert for chk_Enum (Valid Enum)
// Test Case 9: Valid Insert for chk_Enum (Valid Enum)
err = insertOrUpdateData(map[string]interface{}{
"ID": 11,
"ID": 9,
"EnumValue": "OptionB", // Valid enum value
"Flag": false,
"Value": 10,
"Value": 12,
})
if err != nil {
t.Fatalf("Failed to insert valid data for chk_Enum: %v", err)
}

// Test Case 12: Invalid Insert for chk_Enum (Invalid Enum)
// Test Case 10: Invalid Insert for chk_Enum (Invalid Enum)
checkConstraintViolation(map[string]interface{}{
"ID": 12,
"ID": 10,
"EnumValue": "InvalidOption", // Invalid enum value
"Flag": false,
"Value": 10,
"Value": 12,
}, "chk_Enum")

// Test Case 13: Valid Insert for chk_Boolean (Valid boolean 0 or 1)
// Test Case 11: Valid Insert for chk_Boolean (Valid boolean 0 or 1)
err = insertOrUpdateData(map[string]interface{}{
"ID": 13,
"Value": 1, // Valid boolean value
"ID": 11,
"Value": 12,
"Flag": false,
"BooleanValue": 1,
"BooleanValue": 1, // Valid boolean value
})
if err != nil {
t.Fatalf("Failed to insert valid data for chk_Boolean: %v", err)
}

// Test Case 14: Invalid Insert for chk_Boolean (Invalid boolean value)
// Test Case 12: Invalid Insert for chk_Boolean (Invalid boolean value)
checkConstraintViolation(map[string]interface{}{
"ID": 14,
"Value": 2,
"ID": 12,
"Value": 12,
"Flag": false,
"BooleanValue": 2, // Invalid boolean representation
}, "chk_Boolean")

// Test Case 13: Valid Insert for chk_range (Valid value between 10 and 1000)
err = insertOrUpdateData(map[string]interface{}{
"ID": 13,
"Value": 12, // Valid value
"Flag": false,
"BooleanValue": 1,
})
if err != nil {
t.Fatalf("Failed to insert valid data for chk_range: %v", err)
}

// Test Case 14: Invalid Insert for chk_range (Invalid value)
checkConstraintViolation(map[string]interface{}{
"ID": 14,
"Value": 5, // Invalid Value
"Flag": false,
"BooleanValue": 1,
}, "chk_range")

}

func checkResults(t *testing.T, dbURI string, skipJson bool) {
Expand Down

0 comments on commit ee9edeb

Please sign in to comment.