package driver

import (
	"testing"

	. "github.com/smartystreets/goconvey/convey"
)

var canal_update_event_data string = `{"data":[{"id":"1","testtinyint":"127","testsmallint":"32767","testmediumint":"8388607","testint":"-2147483648","testbigint":"9223372036854775807","testvarchar":"3Qa]Eq数","testchar":"","testenum":"1","testset":"7","testtime":"18:06:31","testdate":"2022-10-15","testyear":"2022","testtimestamp":"2022-10-16 02:06:31","testdatetime":"2022-10-15 18:06:31","testfloat":"16737.92","testdouble":"260298.21","testdecimal":"7350188.12","testdecimal2":"-266008.9649","testdecimal3":"5524105207120282.6106","testdecimal4":"1061298287535514418.31018","testtext":"rM2TEf}6<E测试试数测试数试测据测据据据试数据测数","testblob":"#","testbit":"108","testbool":"1","testmediumblob":"<^T3gp@Eo6MTG","testlongblob":"Alc?3bm1sL0","testtinyblob":"2Ms0}9Z/NH_V?SMafEod!|K|9.\"z-","test_unsinged_tinyint":"255","test_unsinged_smallint":"65535","test_unsinged_mediumint":"16777215","test_unsinged_int":"4294967295","test_unsinged_bigint":"1844674407370955161","testtinyint_null":null,"testsmallint_null":null,"testmediumint_null":null,"testint_null":null,"testbigint_null":null,"testvarchar_null":null,"testchar_null":null,"testenum_null":null,"testset_null":null,"testtime_null":null,"testdate_null":null,"testyear_null":null,"testtimestamp_null":null,"testdatetime_null":null,"testfloat_null":null,"testdouble_null":null,"testdecimal_null":null,"testdecimal2_null":null,"testdecimal3_null":null,"testdecimal4_null":null,"testtext_null":null,"testblob_null":null,"testbit_null":null,"testbool_null":null,"testmediumblob_null":null,"testlongblob_null":null,"testtinyblob_null":null,"test_unsinged_tinyint_null":null,"test_unsinged_smallint_null":null,"test_unsinged_mediumint_null":null,"test_unsinged_int_null":null,"test_unsinged_bigint_null":null,"testtime2_1":null,"testtime2_2":"18:06:31.09","testtime2_3":"18:06:31.098","testtime2_4":"18:06:31.0980","testtime2_5":"18:06:31.09830","testtime2_6":"18:06:31.098335","testtimestamp2_1":"2022-10-16 02:06:31.0","testtimestamp2_2":"2022-10-16 02:06:31.00","testtimestamp2_3":"2022-10-16 02:06:31.098","testtimestamp2_4":"2022-10-16 02:06:31.0980","testtimestamp2_5":"2022-10-16 02:06:31.09850","testtimestamp2_6":"2022-10-16 02:06:31.098630","testdatetime2_1":"2022-10-15 18:06:31.0","testdatetime2_2":"2022-10-15 18:06:31.09","testdatetime2_3":"2022-10-15 18:06:31.090","testdatetime2_4":"2022-10-15 18:06:31.0980","testdatetime2_5":"2022-10-15 18:06:31.09879","testdatetime2_6":"2022-10-15 18:06:31.098890","testtime2_1_null":null,"testtime2_2_null":null,"testtime2_3_null":null,"testtime2_4_null":null,"testtime2_5_null":null,"testtime2_6_null":null,"testtimestamp2_1_null":null,"testtimestamp2_2_null":null,"testtimestamp2_3_null":null,"testtimestamp2_4_null":null,"testtimestamp2_5_null":null,"testtimestamp2_6_null":null,"testdatetime2_1_null":null,"testdatetime2_2_null":null,"testdatetime2_3_null":null,"testdatetime2_4_null":null,"testdatetime2_5_null":null,"testdatetime2_6_null":null,"test_json":"{\"key1\": [2147483647, -2147483648, \"2\", null, true, 922337203685477, -922337203685477, {\"key2\": \"qoYuY,Np5Q\\\\OpX9&'o8试测测试据试数数数试试测据试测测\"}, {\"key2\": false}]}","test_json_null":null}],"database":"bifrost_test","es":1665830386000,"id":16,"isDdl":false,"mysqlType":{"id":"int(11) unsigned","testtinyint":"tinyint(4)","testsmallint":"smallint(6)","testmediumint":"mediumint(8)","testint":"int(11)","testbigint":"bigint(20)","testvarchar":"varchar(10)","testchar":"char(2)","testenum":"enum('en1','en2','en3')","testset":"set('set1','set2','set3')","testtime":"time","testdate":"date","testyear":"year(4)","testtimestamp":"timestamp","testdatetime":"datetime","testfloat":"float(9,2)","testdouble":"double(9,2)","testdecimal":"decimal(9,2)","testdecimal2":"decimal(10,4)","testdecimal3":"decimal(20,4)","testdecimal4":"decimal(30,5)","testtext":"text","testblob":"blob","testbit":"bit(8)","testbool":"tinyint(1)","testmediumblob":"mediumblob","testlongblob":"longblob","testtinyblob":"tinyblob","test_unsinged_tinyint":"tinyint(4) unsigned","test_unsinged_smallint":"smallint(6) unsigned","test_unsinged_mediumint":"mediumint(8) unsigned","test_unsinged_int":"int(11) unsigned","test_unsinged_bigint":"bigint(20) unsigned","testtinyint_null":"tinyint(4)","testsmallint_null":"smallint(6)","testmediumint_null":"mediumint(8)","testint_null":"int(11)","testbigint_null":"bigint(20)","testvarchar_null":"varchar(10)","testchar_null":"char(2)","testenum_null":"enum('en1','en2','en3')","testset_null":"set('set1','set2','set3')","testtime_null":"time","testdate_null":"date","testyear_null":"year(4)","testtimestamp_null":"timestamp","testdatetime_null":"datetime","testfloat_null":"float(9,2)","testdouble_null":"double(9,2)","testdecimal_null":"decimal(9,2)","testdecimal2_null":"decimal(10,4)","testdecimal3_null":"decimal(20,4)","testdecimal4_null":"decimal(30,5)","testtext_null":"text","testblob_null":"blob","testbit_null":"bit(8)","testbool_null":"tinyint(1)","testmediumblob_null":"mediumblob","testlongblob_null":"longblob","testtinyblob_null":"tinyblob","test_unsinged_tinyint_null":"tinyint(4) unsigned","test_unsinged_smallint_null":"smallint(6) unsigned","test_unsinged_mediumint_null":"mediumint(8) unsigned","test_unsinged_int_null":"int(11) unsigned","test_unsinged_bigint_null":"bigint(20) unsigned","testtime2_1":"time(1)","testtime2_2":"time(2)","testtime2_3":"time(3)","testtime2_4":"time(4)","testtime2_5":"time(5)","testtime2_6":"time(6)","testtimestamp2_1":"timestamp(1)","testtimestamp2_2":"timestamp(2)","testtimestamp2_3":"timestamp(3)","testtimestamp2_4":"timestamp(4)","testtimestamp2_5":"timestamp(5)","testtimestamp2_6":"timestamp(6)","testdatetime2_1":"datetime(1)","testdatetime2_2":"datetime(2)","testdatetime2_3":"datetime(3)","testdatetime2_4":"datetime(4)","testdatetime2_5":"datetime(5)","testdatetime2_6":"datetime(6)","testtime2_1_null":"time(1)","testtime2_2_null":"time(2)","testtime2_3_null":"time(3)","testtime2_4_null":"time(4)","testtime2_5_null":"time(5)","testtime2_6_null":"time(6)","testtimestamp2_1_null":"timestamp(1)","testtimestamp2_2_null":"timestamp(2)","testtimestamp2_3_null":"timestamp(3)","testtimestamp2_4_null":"timestamp(4)","testtimestamp2_5_null":"timestamp(5)","testtimestamp2_6_null":"timestamp(6)","testdatetime2_1_null":"datetime(1)","testdatetime2_2_null":"datetime(2)","testdatetime2_3_null":"datetime(3)","testdatetime2_4_null":"datetime(4)","testdatetime2_5_null":"datetime(5)","testdatetime2_6_null":"datetime(6)","test_json":"json","test_json_null":"json"},"old":[{"testset":"5"}],"pkNames":["id"],"sql":"","sqlType":{"id":4,"testtinyint":-6,"testsmallint":5,"testmediumint":4,"testint":4,"testbigint":-5,"testvarchar":12,"testchar":1,"testenum":4,"testset":-7,"testtime":92,"testdate":91,"testyear":12,"testtimestamp":93,"testdatetime":93,"testfloat":7,"testdouble":8,"testdecimal":3,"testdecimal2":3,"testdecimal3":3,"testdecimal4":3,"testtext":2005,"testblob":2004,"testbit":-7,"testbool":-6,"testmediumblob":2004,"testlongblob":2004,"testtinyblob":2004,"test_unsinged_tinyint":5,"test_unsinged_smallint":4,"test_unsinged_mediumint":4,"test_unsinged_int":-5,"test_unsinged_bigint":-5,"testtinyint_null":-6,"testsmallint_null":5,"testmediumint_null":4,"testint_null":4,"testbigint_null":-5,"testvarchar_null":12,"testchar_null":1,"testenum_null":4,"testset_null":-2,"testtime_null":92,"testdate_null":91,"testyear_null":12,"testtimestamp_null":93,"testdatetime_null":93,"testfloat_null":7,"testdouble_null":8,"testdecimal_null":3,"testdecimal2_null":3,"testdecimal3_null":3,"testdecimal4_null":3,"testtext_null":-4,"testblob_null":-4,"testbit_null":-7,"testbool_null":-6,"testmediumblob_null":-4,"testlongblob_null":-4,"testtinyblob_null":-3,"test_unsinged_tinyint_null":-6,"test_unsinged_smallint_null":5,"test_unsinged_mediumint_null":4,"test_unsinged_int_null":4,"test_unsinged_bigint_null":-5,"testtime2_1":92,"testtime2_2":92,"testtime2_3":92,"testtime2_4":92,"testtime2_5":92,"testtime2_6":92,"testtimestamp2_1":93,"testtimestamp2_2":93,"testtimestamp2_3":93,"testtimestamp2_4":93,"testtimestamp2_5":93,"testtimestamp2_6":93,"testdatetime2_1":93,"testdatetime2_2":93,"testdatetime2_3":93,"testdatetime2_4":93,"testdatetime2_5":93,"testdatetime2_6":93,"testtime2_1_null":92,"testtime2_2_null":92,"testtime2_3_null":92,"testtime2_4_null":92,"testtime2_5_null":92,"testtime2_6_null":92,"testtimestamp2_1_null":93,"testtimestamp2_2_null":93,"testtimestamp2_3_null":93,"testtimestamp2_4_null":93,"testtimestamp2_5_null":93,"testtimestamp2_6_null":93,"testdatetime2_1_null":93,"testdatetime2_2_null":93,"testdatetime2_3_null":93,"testdatetime2_4_null":93,"testdatetime2_5_null":93,"testdatetime2_6_null":93,"test_json":12,"test_json_null":1111},"table":"binlog_field_test","ts":1665830386329,"type":"UPDATE"}`

func TestNewPluginDataCanal(t *testing.T) {
	Convey("update event", t, func() {
		c, err := NewPluginDataCanal([]byte(canal_update_event_data))
		So(err, ShouldEqual, nil)
		So(c.Type, ShouldEqual, "UPDATE")
	})
}

func TestNewPluginDataCanal2(t *testing.T) {
	Convey("奇数", t, func() {
		i := 1
		So(i&1, ShouldNotEqual, 0)
	})

	Convey("偶数", t, func() {
		i := 2
		So(i&1, ShouldEqual, 0)
	})

	Convey("偶数", t, func() {
		dataType := "Nullable(int(11))"
		dataType = dataType[9 : len(dataType)-1]
		So(dataType, ShouldEqual, "int(11)")
	})

	Convey("update event", t, func() {
		c, err := NewPluginDataCanal([]byte(canal_update_event_data))
		So(err, ShouldEqual, nil)
		bifrostEventData := c.ToBifrostOutputPluginData()
		So(bifrostEventData.EventType, ShouldEqual, "update")
		So(bifrostEventData.Pri, ShouldResemble, c.PkNames)
		So(bifrostEventData.Rows[1], ShouldResemble, c.Data[0])
		So(bifrostEventData.Rows[0], ShouldResemble, c.Old[0])
		So(bifrostEventData.SchemaName, ShouldNotEqual, "")
		So(bifrostEventData.TableName, ShouldNotEqual, "")
		So(bifrostEventData.SchemaName, ShouldEqual, c.Database)
		So(bifrostEventData.TableName, ShouldEqual, c.Table)
	})
}
