package dataflowcli

import (
	"testing"

	legacyproto "github.com/golang/protobuf/proto"
	"github.com/stretchr/testify/require"
	"google.golang.org/grpc/encoding"
	"google.golang.org/protobuf/encoding/protowire"
)

func TestClassicRestoreAccessCompatibilityMessages(t *testing.T) {
	req := &prepareClassicRestoreAccessRequestWire{
		BackupID: 11, BucketID: 22, RestoreID: "33", TrustedRoleARN: "arn:aws:iam::1:role/worker",
	}
	wire, err := legacyproto.Marshal(req)
	require.NoError(t, err)
	require.Equal(t, protowire.AppendVarint(protowire.AppendTag(nil, 1, protowire.VarintType), 11), wire[:2])
	require.Contains(t, string(wire), "arn:aws:iam::1:role/worker")
	buffers, err := encoding.GetCodecV2("proto").Marshal(req)
	require.NoError(t, err, "the gRPC protobuf codec must accept the compatibility message")
	buffers.Free()

	responseWire := protowire.AppendString(protowire.AppendTag(nil, 1, protowire.BytesType), "source-role")
	responseWire = protowire.AppendString(protowire.AppendTag(responseWire, 2, protowire.BytesType), "external-id")
	resp := &prepareClassicRestoreAccessResponseWire{}
	require.NoError(t, legacyproto.Unmarshal(responseWire, resp))
	require.Equal(t, "source-role", resp.SourceRoleARN)
	require.Equal(t, "external-id", resp.ExternalID)
}
