// Copyright 2022 PingCAP, Inc.
//
// Licensed 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,
// See the License for the specific language governing permissions and
// limitations under the License.

package worker

import (
	"context"
	"testing"
	"time"

	"github.com/pingcap/tiflow/engine/executor/worker/internal"
	"github.com/pingcap/tiflow/engine/pkg/clock"
	"github.com/stretchr/testify/require"
)

func TestToRuntimeCtxFromDerivedStdCtx(t *testing.T) {
	rtInfo := internal.RuntimeInfo{SubmitTime: clock.ToMono(time.Unix(1, 1))}
	rctx := newRuntimeCtx(context.Background(), rtInfo)

	ctx1, cancel := context.WithCancel(rctx)
	defer cancel()

	ctx2 := context.WithValue(ctx1, "fake-key", "fake-value")

	rctx1, ok := ToRuntimeCtx(ctx2)
	require.True(t, ok)
	require.Equal(t, &rtInfo, rctx1.info)
}

func TestToRuntimeCtxFalse(t *testing.T) {
	_, ok := ToRuntimeCtx(context.Background())
	require.False(t, ok)
}
