github.com/pingcap/ticdc@v0.0.0-20220526033649-485a10ef2652/integration/tests/case_unsigned.go (about)

     1  // Copyright 2020 PingCAP, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package tests
    15  
    16  import (
    17  	"github.com/pingcap/ticdc/integration/framework"
    18  )
    19  
    20  // UnsignedCase is base impl of test case for unsigned int type data
    21  type UnsignedCase struct {
    22  	framework.Task
    23  }
    24  
    25  // NewUnsignedCase create a test case to check the correction of unsigned integer
    26  func NewUnsignedCase(task framework.Task) *UnsignedCase {
    27  	return &UnsignedCase{
    28  		Task: task,
    29  	}
    30  }
    31  
    32  // Name impl framework.Task interface
    33  func (s *UnsignedCase) Name() string {
    34  	return "Unsigned"
    35  }
    36  
    37  // Run impl framework.Task interface
    38  func (s *UnsignedCase) Run(ctx *framework.TaskContext) error {
    39  	createDBQuery := `create table test (
    40  		id          INT,
    41  		t_int       INT UNSIGNED,
    42  		t_bigint    BIGINT UNSIGNED,
    43  		t_bit       BIT(64),
    44  		PRIMARY KEY (id)
    45  	)
    46      `
    47  	_, err := ctx.Upstream.ExecContext(ctx.Ctx, createDBQuery)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	_, err = ctx.Downstream.ExecContext(ctx.Ctx, "drop table if exists test")
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	_, err = ctx.Downstream.ExecContext(ctx.Ctx, createDBQuery)
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	// Get a handle of an existing table
    63  	table := ctx.SQLHelper().GetTable("test")
    64  	return table.Insert(map[string]interface{}{
    65  		"id":       0,
    66  		"t_int":    0xFEEDBEEF,
    67  		"t_bigint": uint64(0xFEEDBEEFFEEDBEEF),
    68  		"t_bit":    uint64(0xFFFFFFFFFFFFFFFA),
    69  	}).Send().Wait().Check()
    70  }