• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

codenotary / immudb / 6783902372

07 Nov 2023 11:34AM UTC coverage: 89.548% (-0.02%) from 89.571%
6783902372

push

gh-ci

jeroiraz
test(pkg/pgsql): unit testing for deallocate stmt

Signed-off-by: Jeronimo Irazabal <jeronimo.irazabal@gmail.com>

33645 of 37572 relevant lines covered (89.55%)

146027.19 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.77
/pkg/pgsql/server/server.go
1
/*
2
Copyright 2022 Codenotary Inc. All rights reserved.
3

4
Licensed under the Apache License, Version 2.0 (the "License");
5
you may not use this file except in compliance with the License.
6
You may obtain a copy of the License at
7

8
        http://www.apache.org/licenses/LICENSE-2.0
9

10
Unless required by applicable law or agreed to in writing, software
11
distributed under the License is distributed on an "AS IS" BASIS,
12
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
See the License for the specific language governing permissions and
14
limitations under the License.
15
*/
16

17
package server
18

19
import (
20
        "context"
21
        "crypto/tls"
22
        "errors"
23
        "fmt"
24
        "net"
25
        "os"
26
        "sync"
27

28
        "github.com/codenotary/immudb/embedded/logger"
29
        "github.com/codenotary/immudb/pkg/database"
30
        "golang.org/x/net/netutil"
31
)
32

33
type pgsrv struct {
34
        m              sync.RWMutex
35
        running        bool
36
        maxConnections int
37
        tlsConfig      *tls.Config
38
        logger         logger.Logger
39
        host           string
40
        port           int
41
        immudbPort     int
42
        dbList         database.DatabaseList
43
        listener       net.Listener
44
}
45

46
type PGSQLServer interface {
47
        Initialize() error
48
        Serve() error
49
        Stop() error
50
        GetPort() int
51
}
52

53
func New(setters ...Option) *pgsrv {
26✔
54
        // Default Options
26✔
55
        srv := &pgsrv{
26✔
56
                running:        true,
26✔
57
                maxConnections: 1000,
26✔
58
                tlsConfig:      &tls.Config{},
26✔
59
                logger:         logger.NewSimpleLogger("pgsqlSrv", os.Stderr),
26✔
60
                host:           "0.0.0.0",
26✔
61
                immudbPort:     3322,
26✔
62
                port:           5432,
26✔
63
        }
26✔
64

26✔
65
        for _, setter := range setters {
182✔
66
                setter(srv)
156✔
67
        }
156✔
68

69
        return srv
26✔
70
}
71

72
// Initialize initialize listener. If provided port is zero os auto assign a free one.
73
func (s *pgsrv) Initialize() (err error) {
27✔
74
        s.listener, err = net.Listen("tcp", fmt.Sprintf("%s:%d", s.host, s.port))
27✔
75
        if err != nil {
28✔
76
                return err
1✔
77
        }
1✔
78
        return nil
26✔
79
}
80

81
func (s *pgsrv) Serve() (err error) {
27✔
82
        s.m.Lock()
27✔
83
        if s.listener == nil {
28✔
84
                return errors.New("no listener found for pgsql server")
1✔
85
        }
1✔
86
        s.listener = netutil.LimitListener(s.listener, s.maxConnections)
26✔
87
        s.m.Unlock()
26✔
88

26✔
89
        for {
78✔
90
                s.m.Lock()
52✔
91
                if !s.running {
52✔
92
                        s.m.Unlock()
×
93
                        return nil
×
94
                }
×
95
                s.m.Unlock()
52✔
96

52✔
97
                conn, err := s.listener.Accept()
52✔
98
                if err != nil {
52✔
99
                        s.logger.Errorf("%v", err)
×
100
                } else {
26✔
101
                        go s.handleRequest(context.Background(), conn)
26✔
102
                }
26✔
103
        }
104
}
105

106
func (s *pgsrv) newSession(conn net.Conn) Session {
26✔
107
        return newSession(conn, s.host, s.immudbPort, s.logger, s.tlsConfig, s.dbList)
26✔
108
}
26✔
109

110
func (s *pgsrv) Stop() (err error) {
1✔
111
        s.m.Lock()
1✔
112
        defer s.m.Unlock()
1✔
113

1✔
114
        s.running = false
1✔
115

1✔
116
        if s.listener != nil {
1✔
117
                return s.listener.Close()
×
118
        }
×
119

120
        return nil
1✔
121
}
122

123
func (s *pgsrv) GetPort() int {
27✔
124
        s.m.Lock()
27✔
125
        defer s.m.Unlock()
27✔
126

27✔
127
        if s.listener != nil {
53✔
128
                return s.listener.Addr().(*net.TCPAddr).Port
26✔
129
        }
26✔
130

131
        return 0
1✔
132
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc