/*
Copyright 2023 The Kubernetes Authors.

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,
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 ktesting

import (
	"flag"
	"fmt"
	"testing"

	"k8s.io/klog/v2"

	// Initialize command line parameters.
	_ "k8s.io/component-base/logs/testinit"
)

func init() {
	// This is a good default for unit tests. Benchmarks should add their own
	// init function or TestMain to lower the default, for example to 2.
	SetDefaultVerbosity(5)
}

// SetDefaultVerbosity can be called during init to modify the default
// log verbosity of the program.
func SetDefaultVerbosity(v int) {
	f := flag.CommandLine.Lookup("v")
	_ = f.Value.Set(fmt.Sprintf("%d", v))
}

// NewTestContext is a replacement for ktesting.NewTestContext
// which returns a more versatile context.
func NewTestContext(tb testing.TB) (klog.Logger, TContext) {
	tCtx := Init(tb)
	return tCtx.Logger(), tCtx
}
