/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package parser import ( "testing" "github.com/stretchr/testify/assert" "seata.apache.org/seata-go/pkg/datasource/sql/undo" ) func TestProtobufGetName(t *testing.T) { assert.Equal(t, "protobuf", (&ProtobufParser{}).GetName()) } func TestProtobufDefaultContext(t *testing.T) { assert.Equal(t, []byte{}, (&ProtobufParser{}).GetDefaultContent()) } func TestProtobufEncodeDecode(t *testing.T) { TestCases := []struct { CaseName string UndoLog *undo.BranchUndoLog ExpectErr bool }{ { CaseName: "pass", UndoLog: &undo.BranchUndoLog{ Xid: "123456", BranchID: 123456, Logs: []undo.SQLUndoLog{}, }, ExpectErr: false, }, } for _, Case := range TestCases { t.Run(Case.CaseName, func(t *testing.T) { parser := &ProtobufParser{} encodedBytes, err := parser.Encode(Case.UndoLog) if Case.ExpectErr { assert.NotNil(t, err) return } assert.Nil(t, err) decodedUndoLog, err := parser.Decode(encodedBytes) if Case.ExpectErr { assert.NotNil(t, err) return } assert.Nil(t, err) assert.Equal(t, Case.UndoLog.Xid, decodedUndoLog.Xid) assert.Equal(t, Case.UndoLog.BranchID, decodedUndoLog.BranchID) assert.Equal(t, len(Case.UndoLog.Logs), len(decodedUndoLog.Logs)) }) } } func TestConvertInterfaceToAnyAndBack(t *testing.T) { originalValue := map[string]interface{}{ "key1": "value1", "key2": float64(123), // Use float64 to match JSON default behavior "key3": true, } anyValue, err := convertInterfaceToAny(originalValue) assert.NoError(t, err, "convertInterfaceToAny should not return an error") convertedValue, err := convertAnyToInterface(anyValue) assert.NoError(t, err, "convertAnyToInterface should not return an error") assert.Equal(t, originalValue, convertedValue, "The converted value should match the original") }