Skip to content

Commit 295369d

Browse files
authored
Merge pull request #26 from golift/dn2_updates
Module Modernization
2 parents ef3607f + a626390 commit 295369d

File tree

15 files changed

+908
-360
lines changed

15 files changed

+908
-360
lines changed

.github/workflows/codetests.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ jobs:
1313
os: [macos, windows, ubuntu]
1414
runs-on: ${{ matrix.os }}-latest
1515
steps:
16-
- uses: actions/checkout@v4
17-
- uses: actions/setup-go@v4
16+
- uses: actions/checkout@v6
17+
- uses: actions/setup-go@v6
1818
with:
19-
go-version: 1.19
19+
go-version: stable
2020
- name: go-test
2121
run: go test -race -covermode=atomic '-test.v' ./...
2222
# Runs golangci-lint on macos against freebsd and macos.
@@ -29,14 +29,14 @@ jobs:
2929
env:
3030
GOOS: ${{ matrix.os }}
3131
steps:
32-
- uses: actions/setup-go@v4
32+
- uses: actions/setup-go@v6
3333
with:
34-
go-version: 1.19
35-
- uses: actions/checkout@v4
34+
go-version: stable
35+
- uses: actions/checkout@v6
3636
- name: golangci-lint
37-
uses: golangci/golangci-lint-action@v3
37+
uses: golangci/golangci-lint-action@v9
3838
with:
39-
version: v1.50
39+
version: v2.9
4040
# Runs golangci-lint on linux against linux and windows.
4141
golangci-linux:
4242
strategy:
@@ -47,11 +47,11 @@ jobs:
4747
env:
4848
GOOS: ${{ matrix.os }}
4949
steps:
50-
- uses: actions/setup-go@v4
50+
- uses: actions/setup-go@v6
5151
with:
52-
go-version: 1.19
53-
- uses: actions/checkout@v4
52+
go-version: stable
53+
- uses: actions/checkout@v6
5454
- name: golangci-lint
55-
uses: golangci/golangci-lint-action@v3
55+
uses: golangci/golangci-lint-action@v9
5656
with:
57-
version: v1.50
57+
version: v2.9

.golangci.yml

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,31 @@
1-
issues:
2-
exclude-rules:
3-
- linters:
4-
- testpackage
5-
- gochecknoglobals
6-
path: '(.+)_test\.go'
1+
version: '2'
72
linters:
8-
enable-all: true
3+
default: all
94
disable:
10-
# deprecated
11-
- maligned
12-
- scopelint
13-
- interfacer
14-
- golint
15-
- exhaustivestruct
16-
- nosnakecase
17-
- structcheck
18-
- deadcode
19-
- varcheck
20-
- ifshort
21-
# unused
225
- exhaustruct
23-
- nlreturn
24-
run:
25-
timeout: 3m
6+
- depguard
7+
- wsl
8+
- testpackage
9+
settings:
10+
gocritic:
11+
enable-all: true
12+
settings:
13+
unnamedResult:
14+
checkExported: true
15+
errcheck:
16+
check-type-assertions: true
17+
check-blank: false
18+
disable-default-exclusions: false
19+
exclude-functions:
20+
- (*os.File).Close
21+
- (io.Closer).Close
22+
23+
issues:
24+
max-issues-per-linter: 0
25+
max-same-issues: 0
26+
formatters:
27+
enable:
28+
- gci
29+
- gofmt
30+
- gofumpt
31+
- goimports

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2023 David Newhall II
3+
Copyright (c) 2019-2026 David Newhall II
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

concurrency_test.go

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package subscribe
2+
3+
import (
4+
"errors"
5+
"path/filepath"
6+
"strconv"
7+
"sync"
8+
"testing"
9+
"time"
10+
11+
"github.com/stretchr/testify/require"
12+
)
13+
14+
func TestEventsConcurrentAccess(t *testing.T) {
15+
t.Parallel()
16+
17+
events := &Events{Map: make(map[string]*Rules)}
18+
require.NoError(t, events.New("event", nil))
19+
20+
var waitGroup sync.WaitGroup
21+
22+
for i := range 32 {
23+
waitGroup.Go(func() {
24+
rule := "rule_" + strconv.Itoa(i)
25+
for j := range 200 {
26+
events.RuleSetI("event", rule, j)
27+
events.RuleSetS("event", rule, rule)
28+
events.RuleSetD("event", rule, time.Duration(j)*time.Millisecond)
29+
events.RuleSetT("event", rule, time.Now().Add(time.Duration(j)*time.Second))
30+
31+
err := events.Pause("event", time.Millisecond)
32+
if err != nil {
33+
t.Errorf("pause failed: %v", err)
34+
35+
return
36+
}
37+
38+
err = events.UnPause("event")
39+
if err != nil {
40+
t.Errorf("unpause failed: %v", err)
41+
42+
return
43+
}
44+
45+
events.IsPaused("event")
46+
events.PauseTime("event")
47+
events.RuleGetI("event", rule)
48+
events.RuleGetS("event", rule)
49+
events.RuleGetD("event", rule)
50+
events.RuleGetT("event", rule)
51+
events.RuleDelAll("event", rule)
52+
}
53+
})
54+
}
55+
56+
waitGroup.Wait()
57+
}
58+
59+
func TestSubscribeConcurrentAccess(t *testing.T) {
60+
t.Parallel()
61+
62+
stateFile := filepath.Join(t.TempDir(), "state.json")
63+
sub, err := GetDB(stateFile)
64+
require.NoError(t, err)
65+
require.NoError(t, sub.Events.New("evt", nil))
66+
67+
var waitGroup sync.WaitGroup
68+
69+
for i := range 20 {
70+
waitGroup.Go(func() {
71+
contact := "contact_" + strconv.Itoa(i%5)
72+
runSubscribeOps(t, sub, contact)
73+
})
74+
}
75+
76+
waitGroup.Wait()
77+
}
78+
79+
func runSubscribeOps(t *testing.T, sub *Subscribe, contact string) {
80+
t.Helper()
81+
82+
for j := range 100 {
83+
admin := j%2 == 0
84+
ignored := j%3 == 0
85+
subscriber := sub.CreateSub(contact, "api", admin, ignored)
86+
87+
if subscriber == nil {
88+
t.Error("subscriber should not be nil")
89+
90+
return
91+
}
92+
93+
err := subscriber.Subscribe("evt")
94+
95+
if err != nil && !errors.Is(err, ErrEventExists) {
96+
t.Errorf("subscribe failed: %v", err)
97+
98+
return
99+
}
100+
101+
err = subscriber.Events.Pause("evt", time.Millisecond)
102+
if err != nil {
103+
t.Errorf("pause failed: %v", err)
104+
105+
return
106+
}
107+
108+
err = subscriber.Events.UnPause("evt")
109+
if err != nil {
110+
t.Errorf("unpause failed: %v", err)
111+
112+
return
113+
}
114+
115+
_, _ = sub.GetSubscriber(contact, "api")
116+
sub.GetAdmins()
117+
sub.GetIgnored()
118+
sub.GetSubscribers("evt")
119+
_, _ = sub.StateGetJSON()
120+
121+
err = sub.StateFileSave()
122+
if err != nil {
123+
t.Errorf("state save failed: %v", err)
124+
125+
return
126+
}
127+
}
128+
}

0 commit comments

Comments
 (0)