diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index f1386ff50..c120e9232 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -44,7 +44,7 @@ jobs: - name: Install Go uses: actions/setup-go@v5 with: - go-version: "1.23.x" + go-version: "1.24.x" - name: Go Format run: gofmt -s -w . && git diff --exit-code diff --git a/.github/workflows/integration_tests.yaml b/.github/workflows/integration_tests.yaml index f407fc5f4..8f93434a5 100644 --- a/.github/workflows/integration_tests.yaml +++ b/.github/workflows/integration_tests.yaml @@ -41,7 +41,7 @@ jobs: - name: Install Go uses: actions/setup-go@v5 with: - go-version: "1.23.x" + go-version: "1.24.x" - name: Set up Python uses: actions/setup-python@v5 diff --git a/data/ansible/deb_packages/main.yaml b/data/ansible/deb_packages/main.yaml index 4bf7535d5..3a8132ba8 100644 --- a/data/ansible/deb_packages/main.yaml +++ b/data/ansible/deb_packages/main.yaml @@ -6,7 +6,7 @@ ##################### Golang Vars ############################# ############################################################### # Go language SDK version number - golang_version: '1.23' + golang_version: '1.24' go_version_target: "go version go{{ golang_version }} linux/amd64" # Mirror to download the Go language SDK redistributable package from golang_mirror: 'https://storage.googleapis.com/golang' diff --git a/data/ansible/docker/main.yaml b/data/ansible/docker/main.yaml index 567ca5b2c..a4fec2df3 100644 --- a/data/ansible/docker/main.yaml +++ b/data/ansible/docker/main.yaml @@ -6,7 +6,7 @@ ##################### Golang Vars ############################# ############################################################### # Go language SDK version number - golang_version: '1.23' + golang_version: '1.24' go_version_target: "go version go{{ golang_version }} linux/amd64" # Mirror to download the Go language SDK redistributable package from golang_mirror: 'https://storage.googleapis.com/golang' diff --git a/data/ansible/drone/main.yaml b/data/ansible/drone/main.yaml index 41964e823..3aeb195e9 100644 --- a/data/ansible/drone/main.yaml +++ b/data/ansible/drone/main.yaml @@ -6,7 +6,7 @@ ##################### Golang Vars ############################# ############################################################### # Go language SDK version number - golang_version: '1.23' + golang_version: '1.24' go_version_target: "go version go{{ golang_version }} linux/amd64" # Mirror to download the Go language SDK redistributable package from golang_mirror: 'https://storage.googleapis.com/golang' diff --git a/data/ansible/roles/go/defaults/main.yaml b/data/ansible/roles/go/defaults/main.yaml index e24b7cb8a..d48183518 100644 --- a/data/ansible/roles/go/defaults/main.yaml +++ b/data/ansible/roles/go/defaults/main.yaml @@ -1,5 +1,5 @@ --- -go_version: 1.23.0 +go_version: 1.24.0 go_platform: linux go_arch: amd64 go_tarball: go{{ go_version }}.{{ go_platform }}-{{ go_arch }}.tar.gz diff --git a/data/ansible/rpm_packages/main.yaml b/data/ansible/rpm_packages/main.yaml index 33b5a9c8c..332c53a93 100644 --- a/data/ansible/rpm_packages/main.yaml +++ b/data/ansible/rpm_packages/main.yaml @@ -6,7 +6,7 @@ ##################### Golang Vars ############################# ############################################################### # Go language SDK version number - golang_version: '1.23' + golang_version: '1.24' go_version_target: "go version go{{ golang_version }} linux/amd64" # Mirror to download the Go language SDK redistributable package from golang_mirror: 'https://storage.googleapis.com/golang' diff --git a/data/docker/integration/Dockerfile b/data/docker/integration/Dockerfile index 88834d2a2..92d69c49f 100644 --- a/data/docker/integration/Dockerfile +++ b/data/docker/integration/Dockerfile @@ -74,7 +74,7 @@ RUN apt-get clean && \ RUN touch /logs/mariadb.log /logs/mariadb_script.log /logs/rabbitmq.log RUN chmod 777 /logs/mariadb.log /logs/mariadb_script.log /logs/rabbitmq.log -RUN wget -O go.tgz "https://storage.googleapis.com/golang/go1.23.0.linux-amd64.tar.gz" --progress=dot:giga +RUN wget -O go.tgz "https://storage.googleapis.com/golang/go1.24.0.linux-amd64.tar.gz" --progress=dot:giga RUN tar -C /usr/local -xzf go.tgz RUN rm go.tgz diff --git a/docs/installation.rst b/docs/installation.rst index 3e20719e7..ff8985816 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -123,14 +123,14 @@ Install GO Lang First we have to setup the GO Lang to our OS. Feel free to download the latest GO binary release from https://golang.org/dl/ -In this Tutorial we are going to install Go 1.23 +In this Tutorial we are going to install Go 1.24 :: sudo rm -rf /usr/local/go cd /tmp - wget https://go.dev/dl/go1.23.linux-amd64.tar.gz - sudo tar -xvf go1.23.linux-amd64.tar.gz -C /usr/local/ + wget https://go.dev/dl/go1.24.linux-amd64.tar.gz + sudo tar -xvf go1.24.linux-amd64.tar.gz -C /usr/local/ export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin diff --git a/engine/filters_test.go b/engine/filters_test.go index 5fb88eaac..c7e1377a1 100644 --- a/engine/filters_test.go +++ b/engine/filters_test.go @@ -445,7 +445,7 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*string:~*req.Account:1007"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -453,14 +453,14 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*string:~*req.Account:1007"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } //not if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*notstring:~*req.Account:1007"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -476,32 +476,32 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*prefix:~*req.Account:10"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*prefix:~*req.Account:10"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*suffix:~*req.Account:07"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*suffix:~*req.Account:07"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } //not if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*notsuffix:~*req.Account:07"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -517,20 +517,20 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Tenant:~^cgr.*\\.org$"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Tenant:~^cgr.*\\.org$"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } //not if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*notrsr:~*req.Tenant:~^cgr.*\\.org$"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -546,13 +546,13 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*gte:~*req.Weight:20"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*gte:~*req.Weight:10"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } @@ -582,26 +582,26 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { for key := range failEvent { if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*empty:~*req." + key + ":"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("For %s expecting: %+v, received: %+v", key, false, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*empty:~*req." + key + ":"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("For %s expecting: %+v, received: %+v", key, true, pass) } } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*exists:~*req.NewKey:"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("For NewKey expecting: %+v, received: %+v", false, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*notexists:~*req.NewKey:"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("For NewKey expecting: %+v, received: %+v", true, pass) } @@ -622,7 +622,7 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*regex:~*req.Account:\\d{3}7"}, fEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -630,14 +630,14 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*regex:~*req.Account:\\d{3}7"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } //not if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*notregex:~*req.Account:\\d{3}7"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -645,19 +645,19 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { pEv = utils.MapStorage{utils.MetaReq: utils.MapStorage{utils.AccountField: "sip:12345678901234567@abcdefg"}} if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*regex:~*req.Account:.{29,}"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*regex:~*req.Account:^.{28}$"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*gte:~*req.Account{*len}:29"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } @@ -665,7 +665,7 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { pEv = utils.MapStorage{utils.MetaReq: utils.MapStorage{utils.AccountField: "[1,2,3]"}} if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*eq:~*req.Account{*slice&*len}:3"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } @@ -698,13 +698,13 @@ func TestPassFiltersForEventWithEmptyFilter(t *testing.T) { pEv2.Set([]string{utils.MetaReq}, passEvent2) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{}, pEv1); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } if pass, err := filterS.Pass(context.TODO(), "itsyscom.com", []string{}, pEv2); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } @@ -715,7 +715,7 @@ func TestPassFiltersForEventWithEmptyFilter(t *testing.T) { pEv.Set([]string{utils.MetaReq}, ev) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Test:~^\\w{30,}"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -726,7 +726,7 @@ func TestPassFiltersForEventWithEmptyFilter(t *testing.T) { pEv.Set([]string{utils.MetaReq}, ev) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Test:~^\\w{30,}"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } @@ -740,7 +740,7 @@ func TestPassFiltersForEventWithEmptyFilter(t *testing.T) { pEv.Set([]string{utils.MetaReq}, ev) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Test.Test2:~^\\w{30,}"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -753,7 +753,7 @@ func TestPassFiltersForEventWithEmptyFilter(t *testing.T) { pEv.Set([]string{utils.MetaReq}, ev) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Test.Test2:~^\\w{30,}"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } @@ -774,7 +774,7 @@ func TestPassFiltersForEventWithEmptyFilter(t *testing.T) { "*suffix:~*req.Subject:03", "*rsr:~*req.Destination:1002"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } @@ -796,7 +796,7 @@ func TestPassFilterMaxCost(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent1) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*gt:~*req.MaxUsage:0s"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: false , received: %+v", pass) } @@ -808,7 +808,7 @@ func TestPassFilterMaxCost(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent2) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*gt:~*req.MaxUsage:0s"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: false, received: %+v", pass) } @@ -820,13 +820,13 @@ func TestPassFilterMaxCost(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent3) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*gt:~*req.MaxUsage:0"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: true, received: %+v", pass) } if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*gt:~*req.MaxUsage:0"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: true, received: %+v", pass) } @@ -848,7 +848,7 @@ func TestPassFilterMissingField(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent1) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Category:^$"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: true , received: %+v", pass) } @@ -860,7 +860,7 @@ func TestPassFilterMissingField(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent2) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Category:^$"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: true , received: %+v", pass) } @@ -872,7 +872,7 @@ func TestPassFilterMissingField(t *testing.T) { pEv.Set([]string{utils.MetaReq}, passEvent3) if pass, err := filterS.Pass(context.TODO(), "cgrates.org", []string{"*rsr:~*req.Category:^$"}, pEv); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: false , received: %+v", pass) } @@ -946,7 +946,7 @@ func TestPassPartial(t *testing.T) { prefixes := []string{utils.DynamicDataPrefix + utils.MetaReq} if pass, ruleList, err := filterS.LazyPass(context.Background(), "cgrates.org", []string{"*string:~*req.Account:1007"}, fEv, prefixes); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } else if len(ruleList) != 0 { @@ -955,7 +955,7 @@ func TestPassPartial(t *testing.T) { // in PartialPass we verify the filters matching the prefixes if pass, ruleList, err := filterS.LazyPass(context.Background(), "cgrates.org", []string{"*string:~*req.Account:1007", "*string:~*vars.Field1:Val1"}, fEv, prefixes); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if !pass { t.Errorf("Expecting: %+v, received: %+v", true, pass) } else if len(ruleList) != 1 { @@ -963,7 +963,7 @@ func TestPassPartial(t *testing.T) { } if pass, ruleList, err := filterS.LazyPass(context.Background(), "cgrates.org", []string{"*string:~*req.Account:1010", "*string:~*vars.Field1:Val1"}, fEv, prefixes); err != nil { - t.Errorf(err.Error()) + t.Error(err) } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } else if len(ruleList) != 0 { diff --git a/general_tests/session_volume_discount_it_test.go b/general_tests/session_volume_discount_it_test.go index fb2ce1f7a..818522588 100644 --- a/general_tests/session_volume_discount_it_test.go +++ b/general_tests/session_volume_discount_it_test.go @@ -411,7 +411,7 @@ func testSessVolDiscAccountAfterDebiting(t *testing.T) { }, Opts: make(map[string]any), Type: "*abstract", - Units: utils.SumDecimal(&utils.Decimal{utils.NewDecimal(0, 0).Neg(utils.NewDecimal(1, 0).Big)}, utils.NewDecimal(1, 0)), // this should be -0 + Units: utils.SumDecimal(&utils.Decimal{Big: utils.NewDecimal(0, 0).Neg(utils.NewDecimal(1, 0).Big)}, utils.NewDecimal(1, 0)), // this should be -0 CostIncrements: []*utils.CostIncrement{ { Increment: utils.NewDecimal(int64(time.Second), 0), @@ -429,7 +429,7 @@ func testSessVolDiscAccountAfterDebiting(t *testing.T) { }, Opts: make(map[string]any), Type: "*abstract", - Units: utils.SumDecimal(&utils.Decimal{utils.NewDecimal(0, 0).Neg(utils.NewDecimal(1, 0).Big)}, utils.NewDecimal(1, 0)), + Units: utils.SumDecimal(&utils.Decimal{Big: utils.NewDecimal(0, 0).Neg(utils.NewDecimal(1, 0).Big)}, utils.NewDecimal(1, 0)), CostIncrements: []*utils.CostIncrement{ { Increment: utils.NewDecimal(int64(time.Second), 0), diff --git a/go.mod b/go.mod index 8783de59f..cd4f566cc 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/cgrates/cgrates -go 1.23.0 +go 1.24.0 // replace github.com/cgrates/radigo => ../radigo