Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
version: "2"
run:
go: "1.26"
# Vendor deps (e.g. klauspost/compress) use assembly that requires a complete GOROOT pkg/include;
# -tags=noasm matches upstream guidance and keeps typecheck stable across environments.
build-tags:
- noasm
output:
formats:
text:
Expand Down Expand Up @@ -80,6 +84,8 @@ linters:
- open-cluster-management.io/config-policy-controller/api
- open-cluster-management.io/multicloud-operators-subscription/pkg/apis
- sigs.k8s.io/controller-runtime
- sigs.k8s.io/yaml
- github.com/go-git/go-git/v5
- $gostd
- github.com/stretchr/testify
- github.com/stmcginnis/gofish
Expand Down
11 changes: 9 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ require (
github.com/huandu/xstrings v1.5.0 // indirect
github.com/imdario/mergo v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/itchyny/gojq v0.12.17 // indirect
github.com/itchyny/timefmt-go v0.1.6 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
Expand Down Expand Up @@ -206,9 +208,11 @@ require (
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.1 // indirect
github.com/opencontainers/runtime-spec v1.2.1 // indirect
github.com/openshift/assisted-service/models v0.0.0 // indirect
github.com/openshift/cluster-logging-operator/api/observability v0.0.0-20250422180113-5bae4ccfc5ef // indirect
github.com/openshift/custom-resource-status v1.1.3-0.20220503160415-f2fdb4999d87 // indirect
github.com/openshift/elasticsearch-operator v0.0.0-20241202223819-cc1a232913d6 // indirect
github.com/openshift/hive/apis v0.0.0-20250725035156-a29a23859060 // indirect
github.com/openshift/library-go v0.0.0-20251120164824-14a789e09884 // indirect
github.com/openshift/machine-config-operator v0.0.1-0.20250320230514-53e78f3692ee // indirect
github.com/otiai10/copy v1.14.0 // indirect
Expand Down Expand Up @@ -289,10 +293,13 @@ require (
sigs.k8s.io/kustomize/kyaml v0.21.0 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v6 v6.3.2 // indirect
sigs.k8s.io/yaml v1.6.0 // indirect
)

require github.com/rh-ecosystem-edge/eco-goinfra v0.0.0-20260310142116-1622e685ac61
require (
github.com/openshift/assisted-service/api v0.0.0
github.com/rh-ecosystem-edge/eco-goinfra v0.0.0-20260310142116-1622e685ac61
sigs.k8s.io/yaml v1.6.0
)

replace (
github.com/imdario/mergo => github.com/imdario/mergo v0.3.16
Expand Down
11 changes: 11 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,10 @@ github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/itchyny/gojq v0.12.17 h1:8av8eGduDb5+rvEdaOO+zQUjA04MS0m3Ps8HiD+fceg=
github.com/itchyny/gojq v0.12.17/go.mod h1:WBrEMkgAfAGO1LUcGOckBl5O726KPp+OlkKug0I/FEY=
github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/myJ5Q=
github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jellydator/ttlcache/v3 v3.3.0 h1:BdoC9cE81qXfrxeb9eoJi9dWrdhSuwXMAnHTbnBm4Wc=
Expand Down Expand Up @@ -674,6 +678,11 @@ github.com/openshift-kni/oran-o2ims v0.0.0-20260303201028-2a10788e098f h1:RiA6fv
github.com/openshift-kni/oran-o2ims v0.0.0-20260303201028-2a10788e098f/go.mod h1:BCU0A+81U/rc/qj2UnTTuoybUrR9EOkYpCC7F4pSUWo=
github.com/openshift/api v0.0.0-20260302175216-a591881943ae h1:iUahAplEI5iwxswLr5YKEAG7lCwGd08OqgkaY7/5jpw=
github.com/openshift/api v0.0.0-20260302175216-a591881943ae/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY=
github.com/openshift/assisted-service v1.0.10-0.20230830164851-6573b5d7021d h1:CKw2Y4EdaFsMoqAdr2Tq0nlYTaaXmCRdP0gOu7pN64U=
github.com/openshift/assisted-service/api v0.0.0-20260204223219-1574e1fa7ee0 h1:KaOMqvsYhK2b/kCjlQYSmP45prWcaoe+0h2vJHGx7eY=
github.com/openshift/assisted-service/api v0.0.0-20260204223219-1574e1fa7ee0/go.mod h1:796XMQuWnc8XIn3CgRJk3m2g5V3wjcUHrsqDEezE/SE=
github.com/openshift/assisted-service/models v0.0.0-20260204223219-1574e1fa7ee0 h1:CBjgoyj91oXk/MF99HRr7s/08mOJFAVckJ195SdyQiE=
github.com/openshift/assisted-service/models v0.0.0-20260204223219-1574e1fa7ee0/go.mod h1:5EkIueBSaLnt64HR8drgSewdm+GeuE7W5mr9pa2JXXk=
github.com/openshift/client-go v0.0.0-20251205093018-96a6cbc1420c h1:TBE0Gl+oCo/SNEhLKZQNNH/SWHXrpGyhAw7P0lAqdHg=
github.com/openshift/client-go v0.0.0-20251205093018-96a6cbc1420c/go.mod h1:IsynOWZAfdH+BgWimcFQRtI41Id9sgdhsCEjIk8ACLw=
github.com/openshift/cluster-logging-operator/api/observability v0.0.0-20250422180113-5bae4ccfc5ef h1:btjgRrxWTbrSRVLf9oIJiAUykmv+dG0N8ImEx9RuhyE=
Expand All @@ -686,6 +695,8 @@ github.com/openshift/custom-resource-status v1.1.3-0.20220503160415-f2fdb4999d87
github.com/openshift/custom-resource-status v1.1.3-0.20220503160415-f2fdb4999d87/go.mod h1:DB/Mf2oTeiAmVVX1gN+NEqweonAPY0TKUwADizj8+ZA=
github.com/openshift/elasticsearch-operator v0.0.0-20241202223819-cc1a232913d6 h1:FwavaLCfr3djOzS0NILkeT1yRCFNESvrmN95d/Xl9wE=
github.com/openshift/elasticsearch-operator v0.0.0-20241202223819-cc1a232913d6/go.mod h1:4XJJi5/IyM3C5ebS3YXu8ejyjBuRbxTCf8Sex+0pPg8=
github.com/openshift/hive/apis v0.0.0-20250725035156-a29a23859060 h1:MIseGDYL78FNVjzoek+UcA94pbzEAnlpytdN6aaB8zc=
github.com/openshift/hive/apis v0.0.0-20250725035156-a29a23859060/go.mod h1:XUEuhGkTuSXP+eb0LtY3/iJTs/3Fc18CVkqMsmgN+gg=
github.com/openshift/installer v0.0.0-20260211082425-e973ac44d688 h1:AZoAvCYIuLkD1FLC8OeF/SL/kSLWxreGLJQJeq2moYo=
github.com/openshift/installer v0.0.0-20260211082425-e973ac44d688/go.mod h1:3ATaLOa+jMDvA30gkrTskppvkggXmtKHtMWQ1Sog6kA=
github.com/openshift/library-go v0.0.0-20251120164824-14a789e09884 h1:6512TMT14gnXQ4vyshzAQGjkctU0PO9G+y0tcBjw6Vk=
Expand Down
3 changes: 3 additions & 0 deletions scripts/golangci-lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ function RunGolangCiLint() {

echo "Running golangci-lint"

# go.mod may require a newer toolchain than the system `go`; fetch it automatically.
export GOTOOLCHAIN="${GOTOOLCHAIN:-auto}"

if golangci-lint run -v; then
return 0;
fi
Expand Down
254 changes: 254 additions & 0 deletions tests/lca/imagebasedinstall/cnf/ran/internal/ranconfig/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
package ranconfig

import (
"fmt"
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
"time"

"github.com/kelseyhightower/envconfig"
"github.com/rh-ecosystem-edge/eco-gotests/tests/lca/imagebasedinstall/cnf/ran/internal/ranparams"
"github.com/rh-ecosystem-edge/eco-gotests/tests/lca/imagebasedinstall/internal/ibiconfig"
"gopkg.in/yaml.v2"
"k8s.io/klog/v2"
)

const (
// PathToDefaultRanParamsFile path to config file with default ran test parameters.
PathToDefaultRanParamsFile = "./default.yaml"
)

// RanConfig holds configuration for IBI CNF (ran) workflows such as preinstall.
type RanConfig struct {
*ibiconfig.IBIConfig

HubKubeConfig string `yaml:"hub_kubeconfig" envconfig:"ECO_LCA_IBI_CNF_RAN_HUB_KUBECONFIG"`
SeedImage string `yaml:"seed_image" envconfig:"ECO_LCA_IBI_SEED_IMAGE"`
SiteConfigRepo string `yaml:"siteconfig_repo" envconfig:"ECO_LCA_IBI_SITECONFIG_REPO"`
SiteConfigBranch string `yaml:"siteconfig_branch" envconfig:"ECO_LCA_IBI_SITECONFIG_BRANCH"`
ReleaseImage string `yaml:"release_image" envconfig:"ECO_LCA_IBI_RELEASE_IMAGE"`
ProvisioningHost string `yaml:"provisioning_host" envconfig:"ECO_LCA_IBI_PROVISIONING_HOST"`
ProvisioningUser string `yaml:"provisioning_user" envconfig:"ECO_LCA_IBI_PROVISIONING_USER"`

// ProvisioningSSHKey is the private key path for SSH to the provisioning host.
ProvisioningSSHKey string `yaml:"provisioning_ssh_key" envconfig:"ECO_LCA_IBI_PROVISIONING_SSH_KEY"`

// ProvisioningSSHDir is the directory containing the default private key (id_rsa or id_ed25519).
ProvisioningSSHDir string `yaml:"provisioning_ssh_dir" envconfig:"ECO_LCA_IBI_PROVISIONING_SSH_DIR"`

BMCUsername string `yaml:"bmc_username" envconfig:"ECO_LCA_IBI_BMC_USERNAME"`
BMCPassword string `yaml:"bmc_password" envconfig:"ECO_LCA_IBI_BMC_PASSWORD"`
Comment on lines +42 to +43
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Keep BMC credentials env-only.

These YAML tags allow file-backed config to supply BMC credentials. That contradicts the stated requirement for this flow that BMC username/password come from environment variables only.

💡 Proposed fix
-	BMCUsername string `yaml:"bmc_username" envconfig:"ECO_LCA_IBI_BMC_USERNAME"`
-	BMCPassword string `yaml:"bmc_password" envconfig:"ECO_LCA_IBI_BMC_PASSWORD"`
+	BMCUsername string `yaml:"-" envconfig:"ECO_LCA_IBI_BMC_USERNAME"`
+	BMCPassword string `yaml:"-" envconfig:"ECO_LCA_IBI_BMC_PASSWORD"`
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
BMCUsername string `yaml:"bmc_username" envconfig:"ECO_LCA_IBI_BMC_USERNAME"`
BMCPassword string `yaml:"bmc_password" envconfig:"ECO_LCA_IBI_BMC_PASSWORD"`
BMCUsername string `yaml:"-" envconfig:"ECO_LCA_IBI_BMC_USERNAME"`
BMCPassword string `yaml:"-" envconfig:"ECO_LCA_IBI_BMC_PASSWORD"`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/lca/imagebasedinstall/cnf/ran/internal/ranconfig/config.go` around
lines 42 - 43, Remove the YAML tags from the BMC credentials so they are only
sourced from environment variables: update the struct fields BMCUsername and
BMCPassword in config.go to drop the `yaml:"..."` tags and keep only the
`envconfig:"ECO_LCA_IBI_BMC_USERNAME"` and
`envconfig:"ECO_LCA_IBI_BMC_PASSWORD"` tags (or otherwise ensure those fields
are not unmarshaled from YAML), so BMC credentials are env-only.


SiteConfigKustomizePath string `yaml:"siteconfig_kustomize_path" envconfig:"ECO_LCA_IBI_SITECONFIG_KUSTOMIZE_PATH"`

// SiteConfigGitSkipTLS skips TLS verification when cloning the siteconfig repo (go-git).
SiteConfigGitSkipTLS bool `yaml:"siteconfig_git_skip_tls" envconfig:"ECO_LCA_IBI_SITECONFIG_GIT_SKIP_TLS"` //nolint:lll // long envconfig tag

// ISOHTTPBaseURL is the HTTP base for the live ISO (e.g. http://host:8080/images), no trailing slash.
ISOHTTPBaseURL string `yaml:"iso_http_base_url" envconfig:"ECO_LCA_IBI_ISO_HTTP_BASE_URL"`

RemoteISOPath string `yaml:"remote_iso_path" envconfig:"ECO_LCA_IBI_REMOTE_ISO_PATH"`

PreinstallNodeSSHUser string `yaml:"preinstall_node_ssh_user" envconfig:"ECO_LCA_IBI_PREINSTALL_NODE_SSH_USER"`

PreinstallWaitTimeoutSeconds int `yaml:"preinstall_wait_timeout_seconds" envconfig:"ECO_LCA_IBI_PREINSTALL_WAIT_TIMEOUT_SECONDS"` //nolint:lll // long envconfig tag

ExtraPartitionLabel string `yaml:"extra_partition_label" envconfig:"ECO_LCA_IBI_EXTRA_PARTITION_LABEL"`

// BootstrapOC is the host oc binary for `oc adm release extract` when that path exists.
BootstrapOC string `yaml:"bootstrap_oc" envconfig:"ECO_LCA_IBI_BOOTSTRAP_OC"`
}

// NewRanConfig returns a RanConfig loaded from default.yaml and the environment.
func NewRanConfig() *RanConfig {
klog.V(ranparams.RANLogLevel).Info("Creating new RanConfig struct")

var ranConfig RanConfig

ranConfig.IBIConfig = ibiconfig.NewIBIConfig()

_, filename, _, _ := runtime.Caller(0)
baseDir := filepath.Dir(filename)
configFile := filepath.Join(baseDir, PathToDefaultRanParamsFile)

err := readFile(&ranConfig, configFile)
if err != nil {
klog.V(ranparams.RANLogLevel).Infof("Error reading config file %s: %v", configFile, err)
}

err = envconfig.Process("", &ranConfig)
if err != nil {
klog.V(ranparams.RANLogLevel).Infof("Error reading environment variables: %v", err)

return nil
}

return &ranConfig
}

func readFile(ranConfig *RanConfig, configFile string) error {
openedConfigFile, err := os.Open(configFile)
if err != nil {
return err
}

defer func() {
_ = openedConfigFile.Close()
}()

decoder := yaml.NewDecoder(openedConfigFile)

return decoder.Decode(ranConfig)
}

// ValidateMandatory returns an error listing any mandatory preinstall settings that are unset.
func (c *RanConfig) ValidateMandatory() error {
if c == nil {
return fmt.Errorf("ran config is nil")
}

var missing []string

if c.HubKubeConfig == "" {
missing = append(missing, "ECO_LCA_IBI_CNF_RAN_HUB_KUBECONFIG")
}

if c.SeedImage == "" {
missing = append(missing, "ECO_LCA_IBI_SEED_IMAGE")
}

if c.SiteConfigRepo == "" {
missing = append(missing, "ECO_LCA_IBI_SITECONFIG_REPO")
}

if c.SiteConfigBranch == "" {
missing = append(missing, "ECO_LCA_IBI_SITECONFIG_BRANCH")
}

if c.ReleaseImage == "" {
missing = append(missing, "ECO_LCA_IBI_RELEASE_IMAGE")
}

if c.ProvisioningHost == "" {
missing = append(missing, "ECO_LCA_IBI_PROVISIONING_HOST")
}

if c.BMCUsername == "" {
missing = append(missing, "ECO_LCA_IBI_BMC_USERNAME")
}

if c.BMCPassword == "" {
missing = append(missing, "ECO_LCA_IBI_BMC_PASSWORD")
}

if c.SiteConfigKustomizePath == "" {
missing = append(missing, "siteconfig_kustomize_path (default.yaml or ECO_LCA_IBI_SITECONFIG_KUSTOMIZE_PATH)")
}

if c.ISOHTTPBaseURL == "" {
missing = append(missing, "ECO_LCA_IBI_ISO_HTTP_BASE_URL (or iso_http_base_url in default.yaml)")
}

if c.RemoteISOPath == "" {
missing = append(missing, "remote_iso_path (default.yaml or ECO_LCA_IBI_REMOTE_ISO_PATH)")
}

if c.ProvisioningUser == "" {
missing = append(missing, "provisioning_user (default.yaml or ECO_LCA_IBI_PROVISIONING_USER)")
}

if c.PreinstallNodeSSHUser == "" {
missing = append(missing, "preinstall_node_ssh_user (default.yaml or ECO_LCA_IBI_PREINSTALL_NODE_SSH_USER)")
}

if c.PreinstallWaitTimeoutSeconds <= 0 {
missing = append(missing,
"preinstall_wait_timeout_seconds (default.yaml or ECO_LCA_IBI_PREINSTALL_WAIT_TIMEOUT_SECONDS)")
}

if c.ProvisioningSSHKey == "" && c.ProvisioningSSHDir == "" {
missing = append(missing, "ECO_LCA_IBI_PROVISIONING_SSH_KEY or ECO_LCA_IBI_PROVISIONING_SSH_DIR")
}

if len(missing) > 0 {
return fmt.Errorf("missing required configuration: %s", strings.Join(missing, ", "))
}

return nil
}

// ResolveBootstrapOCPath returns the oc binary for `oc adm release extract`.
// Order: BootstrapOC from config (yaml + env) if that path exists and is a file, then oc on PATH.
// A configured path that does not exist is logged and ignored so PATH fallback can run.
func (c *RanConfig) ResolveBootstrapOCPath() (string, error) {
if c != nil {
if bootstrapPath := strings.TrimSpace(c.BootstrapOC); bootstrapPath != "" {
fi, err := os.Stat(bootstrapPath)
if err != nil {
if os.IsNotExist(err) {
klog.Warningf("bootstrap oc %q does not exist, falling back to oc on PATH", bootstrapPath)
} else {
return "", fmt.Errorf("bootstrap oc %q: %w", bootstrapPath, err)
}
} else {
if fi.IsDir() {
return "", fmt.Errorf("bootstrap oc %q is a directory", bootstrapPath)
}

return bootstrapPath, nil
}
}
}

path, err := exec.LookPath("oc") //nolint:gosec // PATH lookup for oc
if err != nil {
return "", fmt.Errorf(
"bootstrap oc not found: set bootstrap_oc in default.yaml or ECO_LCA_IBI_BOOTSTRAP_OC, or install oc on PATH (%w)",
err)
}

return path, nil
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

// EffectiveProvisioningSSHKey returns the SSH private key path for the provisioning host.
func (c *RanConfig) EffectiveProvisioningSSHKey() string {
if c == nil {
return ""
}

if c.ProvisioningSSHKey != "" {
return c.ProvisioningSSHKey
}

dir := c.ProvisioningSSHDir

for _, name := range []string{"id_rsa", "id_ed25519"} {
p := filepath.Join(dir, name)

fi, err := os.Stat(p)
if err == nil && !fi.IsDir() {
return p
}
}

return filepath.Join(dir, "id_rsa")
}

// EffectivePreinstallWait returns the max wait duration loaded from configuration (no hard-coded default).
func (c *RanConfig) EffectivePreinstallWait() time.Duration {
if c == nil {
return 0
}

return time.Duration(c.PreinstallWaitTimeoutSeconds) * time.Second
}

// ISOArtifactURL builds the full URL for a file under ISOHTTPBaseURL (e.g. rhcos-ibi.iso).
func (c *RanConfig) ISOArtifactURL(filename string) string {
base := strings.TrimSuffix(c.ISOHTTPBaseURL, "/")

return fmt.Sprintf("%s/%s", base, strings.TrimPrefix(filename, "/"))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
# Defaults for IBI CNF / ran tests; override with environment (ECO_LCA_IBI_*).
provisioning_user: "kni"
provisioning_ssh_dir: "/home/kni/.ssh"
siteconfig_kustomize_path: "siteconfig"
siteconfig_git_skip_tls: false
remote_iso_path: "/opt/cached_disconnected_images/rhcos-ibi.iso"
# Base URL for the live ISO (no trailing slash), e.g. http://192.168.1.5:8080/images
iso_http_base_url: ""
preinstall_node_ssh_user: "core"
preinstall_wait_timeout_seconds: 3600
bootstrap_oc: "/home/kni/.local/bin/oc"
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package raninittools

import (
"github.com/rh-ecosystem-edge/eco-goinfra/pkg/clients"
"github.com/rh-ecosystem-edge/eco-gotests/tests/lca/imagebasedinstall/cnf/ran/internal/ranconfig"
)

var (
// HubAPIClient is the API client to the hub cluster (used for pull-secret, BMH, etc.).
HubAPIClient *clients.Settings
// RanConfig provides access to ran (CNF IBI) configuration parameters.
RanConfig *ranconfig.RanConfig
)

//nolint:gochecknoinits // Package initialization pattern used throughout eco-gotests
func init() {
RanConfig = ranconfig.NewRanConfig()

if RanConfig != nil && RanConfig.HubKubeConfig != "" {
HubAPIClient = clients.New(RanConfig.HubKubeConfig)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ranparams

const (
// RANLogLevel custom loglevel for the ran (CNF) IBI testing verbose mode.
RANLogLevel = 50
// Label represents ran label that can be used for test cases selection.
Label = "ran"
)
Loading