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

mendersoftware / mender-server / 1622978334

13 Jan 2025 03:51PM UTC coverage: 72.802% (-3.8%) from 76.608%
1622978334

Pull #300

gitlab-ci

alfrunes
fix: Deployment device count should not exceed max devices

Added a condition to skip deployments when the device count reaches max
devices.

Changelog: Title
Ticket: MEN-7847
Signed-off-by: Alf-Rune Siqveland <alf.rune@northern.tech>
Pull Request #300: fix: Deployment device count should not exceed max devices

4251 of 6164 branches covered (68.96%)

Branch coverage included in aggregate %.

0 of 18 new or added lines in 1 file covered. (0.0%)

2544 existing lines in 83 files now uncovered.

42741 of 58384 relevant lines covered (73.21%)

21.49 hits per line

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

0.0
/backend/services/deviceauth/server.go
1
// Copyright 2023 Northern.tech AS
2
//
3
//    Licensed under the Apache License, Version 2.0 (the "License");
4
//    you may not use this file except in compliance with the License.
5
//    You may obtain a copy of the License at
6
//
7
//        http://www.apache.org/licenses/LICENSE-2.0
8
//
9
//    Unless required by applicable law or agreed to in writing, software
10
//    distributed under the License is distributed on an "AS IS" BASIS,
11
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
//    See the License for the specific language governing permissions and
13
//    limitations under the License.
14

15
package main
16

17
import (
18
        "context"
19
        "net/http"
20
        "time"
21

22
        "github.com/pkg/errors"
23

24
        "github.com/mendersoftware/mender-server/pkg/config"
25
        "github.com/mendersoftware/mender-server/pkg/log"
26

27
        api_http "github.com/mendersoftware/mender-server/services/deviceauth/api/http"
28
        "github.com/mendersoftware/mender-server/services/deviceauth/cache"
29
        "github.com/mendersoftware/mender-server/services/deviceauth/client/orchestrator"
30
        "github.com/mendersoftware/mender-server/services/deviceauth/client/tenant"
31
        dconfig "github.com/mendersoftware/mender-server/services/deviceauth/config"
32
        "github.com/mendersoftware/mender-server/services/deviceauth/devauth"
33
        "github.com/mendersoftware/mender-server/services/deviceauth/jwt"
34
        "github.com/mendersoftware/mender-server/services/deviceauth/store/mongo"
35
)
36

UNCOV
37
func RunServer(c config.Reader) error {
×
UNCOV
38
        var tenantadmAddr = c.GetString(dconfig.SettingTenantAdmAddr)
×
UNCOV
39

×
UNCOV
40
        l := log.New(log.Ctx{})
×
UNCOV
41

×
UNCOV
42
        db, err := mongo.NewDataStoreMongo(
×
UNCOV
43
                mongo.DataStoreMongoConfig{
×
UNCOV
44
                        ConnectionString: c.GetString(dconfig.SettingDb),
×
UNCOV
45

×
UNCOV
46
                        SSL:           c.GetBool(dconfig.SettingDbSSL),
×
UNCOV
47
                        SSLSkipVerify: c.GetBool(dconfig.SettingDbSSLSkipVerify),
×
UNCOV
48

×
UNCOV
49
                        Username: c.GetString(dconfig.SettingDbUsername),
×
UNCOV
50
                        Password: c.GetString(dconfig.SettingDbPassword),
×
UNCOV
51
                })
×
UNCOV
52
        if err != nil {
×
UNCOV
53
                return errors.Wrap(err, "database connection failed")
×
UNCOV
54
        }
×
55

56
        jwtHandler, err := jwt.NewJWTHandler(
×
57
                c.GetString(dconfig.SettingServerPrivKeyPath),
×
UNCOV
58
        )
×
UNCOV
59
        var jwtFallbackHandler jwt.Handler
×
UNCOV
60
        fallback := c.GetString(dconfig.SettingServerFallbackPrivKeyPath)
×
UNCOV
61
        if err == nil && fallback != "" {
×
UNCOV
62
                jwtFallbackHandler, err = jwt.NewJWTHandler(
×
UNCOV
63
                        fallback,
×
UNCOV
64
                )
×
65
        }
×
66
        if err != nil {
×
67
                return err
×
68
        }
×
69

70
        orchClientConf := orchestrator.Config{
×
71
                OrchestratorAddr: c.GetString(dconfig.SettingOrchestratorAddr),
×
UNCOV
72
                Timeout:          time.Duration(30) * time.Second,
×
UNCOV
73
        }
×
UNCOV
74

×
UNCOV
75
        devauth := devauth.NewDevAuth(db,
×
UNCOV
76
                orchestrator.NewClient(orchClientConf),
×
UNCOV
77
                jwtHandler,
×
UNCOV
78
                devauth.Config{
×
UNCOV
79
                        Issuer:             c.GetString(dconfig.SettingJWTIssuer),
×
UNCOV
80
                        ExpirationTime:     int64(c.GetInt(dconfig.SettingJWTExpirationTimeout)),
×
UNCOV
81
                        DefaultTenantToken: c.GetString(dconfig.SettingDefaultTenantToken),
×
UNCOV
82
                        InventoryAddr:      config.Config.GetString(dconfig.SettingInventoryAddr),
×
UNCOV
83

×
UNCOV
84
                        EnableReporting: config.Config.GetBool(dconfig.SettingEnableReporting),
×
UNCOV
85
                        HaveAddons: config.Config.GetBool(dconfig.SettingHaveAddons) &&
×
UNCOV
86
                                tenantadmAddr != "",
×
UNCOV
87
                })
×
UNCOV
88

×
UNCOV
89
        if jwtFallbackHandler != nil {
×
UNCOV
90
                devauth = devauth.WithJWTFallbackHandler(jwtFallbackHandler)
×
UNCOV
91
        }
×
92

93
        if tenantadmAddr != "" {
×
94
                tc := tenant.NewClient(tenant.Config{
×
UNCOV
95
                        TenantAdmAddr: tenantadmAddr,
×
UNCOV
96
                })
×
97
                devauth = devauth.WithTenantVerification(tc)
×
98
        }
×
99

100
        cacheConnStr := c.GetString(dconfig.SettingRedisConnectionString)
×
101
        if cacheConnStr == "" {
×
UNCOV
102
                // for backward compatibility check old redis_addr setting
×
UNCOV
103
                cacheConnStr = c.GetString(dconfig.SettingRedisAddr)
×
UNCOV
104
        }
×
UNCOV
105
        if cacheConnStr != "" {
×
UNCOV
106
                l.Infof("setting up redis cache")
×
UNCOV
107

×
UNCOV
108
                cache, err := cache.NewRedisCache(
×
109
                        context.TODO(),
×
110
                        cacheConnStr,
×
111
                        c.GetString(dconfig.SettingRedisKeyPrefix),
×
112
                        c.GetInt(dconfig.SettingRedisLimitsExpSec),
×
113
                )
×
114

×
115
                if err != nil {
×
116
                        return err
×
117
                }
×
118

119
                devauth = devauth.WithCache(cache)
×
120
        }
121

122
        devauthapi := api_http.NewDevAuthApiHandlers(devauth, db)
×
UNCOV
123

×
UNCOV
124
        apiHandler, err := devauthapi.Build()
×
UNCOV
125
        if err != nil {
×
UNCOV
126
                return errors.Wrap(err, "device authentication API handlers setup failed")
×
UNCOV
127
        }
×
128

129
        addr := c.GetString(dconfig.SettingListen)
×
130
        l.Printf("listening on %s", addr)
×
UNCOV
131

×
UNCOV
132
        return http.ListenAndServe(addr, apiHandler)
×
133
}
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

© 2025 Coveralls, Inc