Skip to content

Commit a8a5d2b

Browse files
committed
Transform test into e2e test
Signed-off-by: Anton Litvinov <[email protected]>
1 parent f916db2 commit a8a5d2b

File tree

8 files changed

+205
-6
lines changed

8 files changed

+205
-6
lines changed

.github/workflows/tests-and-linters.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ jobs:
6060
- name: E2E basic test
6161
run: go run mage.go -v TestE2EBasic
6262

63+
- name: E2E basic test2
64+
run: go run mage.go -v TestE2EShaper
65+
6366
e2e-nat:
6467
runs-on: ubuntu-latest
6568

ci/test/e2e.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@ func BuildE2eTestBinary() error {
4545
if err != nil {
4646
return err
4747
}
48+
err = sh.RunWith(crossCompileFlags, "go", "test", "-c", "./e2e/bug6022")
49+
if err != nil {
50+
return err
51+
}
52+
err = sh.RunWith(crossCompileFlags, "go", "build", "-o", "bug6022.aux", "./e2e/bug6022")
53+
if err != nil {
54+
return err
55+
}
56+
_ = os.Mkdir("./build/e2e/", os.ModeDir)
57+
os.Rename("./bug6022.test", "./build/e2e/bug6022.test")
58+
os.Rename("./bug6022.aux", "./build/e2e/bug6022.aux")
4859

4960
_ = os.Mkdir("./build/e2e/", os.ModeDir)
5061
return os.Rename("./e2e.test", "./build/e2e/test")
@@ -75,6 +86,26 @@ func TestE2EBasic() error {
7586
return runner.Test("myst-provider")
7687
}
7788

89+
// TestE2EShaper runs end-to-end tests
90+
func TestE2EShaper() error {
91+
logconfig.Bootstrap()
92+
93+
mg.Deps(BuildMystBinaryForE2eDocker, BuildE2eDeployerBinary)
94+
95+
// not running this in parallel as it does some package switching magic
96+
mg.Deps(BuildE2eTestBinary)
97+
98+
composeFiles := []string{
99+
"./docker-compose.e2e-basic.yml",
100+
}
101+
runner, cleanup := e2e.NewRunner(composeFiles, "node_e2e_basic_test", "")
102+
defer cleanup()
103+
if err := runner.Init_(); err != nil {
104+
return err
105+
}
106+
return runner.Test_()
107+
}
108+
78109
// TestE2ENAT runs end-to-end tests in NAT environment
79110
func TestE2ENAT() error {
80111
logconfig.Bootstrap()

docker-compose.e2e-basic.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,8 +571,20 @@ services:
571571
--observer.address=""
572572
daemon
573573
574+
bug6022-aux:
575+
build:
576+
context: .
577+
dockerfile: ./e2e/bug6022/Dockerfile
578+
cap_add:
579+
- NET_ADMIN
580+
working_dir: /node
581+
expose:
582+
- 8083
583+
574584
#go runner to run go programs inside localnet (usefull for contract deployment or e2e test running)
575585
go-runner:
586+
depends_on:
587+
- bug6022-aux
576588
build:
577589
context: .
578590
dockerfile: ./e2e/gorunner/Dockerfile.precompiled

e2e/bug6022/Dockerfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM alpine:3.12
2+
3+
#COPY ./build/e2e/bug6022.test /usr/local/bin/bug6022.test
4+
COPY ./build/e2e/bug6022.aux /usr/local/bin/bug6022.aux
5+
6+
ENTRYPOINT ["/usr/local/bin/bug6022.aux"]

e2e/bug6022/hello.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright (C) 2024 The "MysteriumNetwork/node" Authors.
3+
*
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
*/
17+
18+
package main
19+
20+
import (
21+
"fmt"
22+
"net/http"
23+
)
24+
25+
func main() {
26+
http.HandleFunc("/", handler)
27+
http.ListenAndServe(":8083", nil)
28+
}
29+
30+
func handler(w http.ResponseWriter, r *http.Request) {
31+
fmt.Println(r.URL.Path, r.RemoteAddr)
32+
fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
33+
}
Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,17 @@
1515
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18-
package netstack_provider
18+
package main
1919

2020
import (
2121
"bytes"
2222
"encoding/hex"
2323
"io"
2424
"log"
25+
"net"
2526
"net/http"
2627
"net/netip"
28+
"net/url"
2729
"strings"
2830
"testing"
2931

@@ -33,6 +35,7 @@ import (
3335

3436
"github.com/mysteriumnetwork/node/config"
3537
netstack "github.com/mysteriumnetwork/node/services/wireguard/endpoint/netstack"
38+
netstack_provider "github.com/mysteriumnetwork/node/services/wireguard/endpoint/netstack-provider"
3639
)
3740

3841
func startClient(t *testing.T, priv, pubServ wgtypes.Key) {
@@ -68,15 +71,28 @@ func startClient(t *testing.T, priv, pubServ wgtypes.Key) {
6871
DialContext: tnet.DialContext,
6972
},
7073
}
74+
url_ := "http://bug6022-aux:8083/test"
75+
u, _ := url.Parse(url_)
76+
// log.Println(u.Host)
77+
78+
addr, err := net.LookupHost("bug6022-aux")
79+
log.Println(addr, err)
80+
if len(addr) > 0 {
81+
u.Host = addr[0] + ":" + u.Port()
82+
}
83+
log.Println(">>>> ", u.String())
7184

72-
resp, err := client.Get("http://107.173.23.19:8080/test")
85+
resp, err := client.Get(u.String())
7386
if err != nil {
7487
t.Error(err)
88+
log.Println(err)
7589
return
7690
}
91+
// _ = resp
7792
body, err := io.ReadAll(resp.Body)
7893
if err != nil {
7994
t.Error(err)
95+
log.Println(err)
8096
return
8197
}
8298
log.Println("Reply:", string(body))
@@ -87,12 +103,10 @@ func startClient(t *testing.T, priv, pubServ wgtypes.Key) {
87103
ok = "failed"
88104
}
89105
log.Println("Test result:", ok)
90-
// dev.Down()
91-
// tun.Close()
92106
}
93107

94108
func startServer(t *testing.T, privKey, pubClinet wgtypes.Key) {
95-
tun, _, _, err := CreateNetTUNWithStack(
109+
tun, _, _, err := netstack_provider.CreateNetTUNWithStack(
96110
[]netip.Addr{netip.MustParseAddr("192.168.4.1")},
97111
53,
98112
device.DefaultMTU,
@@ -124,7 +138,9 @@ func TestShaperEnabled(t *testing.T) {
124138

125139
config.Current.SetDefault(config.FlagShaperBandwidth.Name, "6250")
126140
config.Current.SetDefault(config.FlagShaperEnabled.Name, "true")
127-
InitUserspaceShaper(nil)
141+
config.FlagFirewallProtectedNetworks.Value = "10.0.0.0/8,192.168.0.0/16,127.0.0.0/8"
142+
143+
netstack_provider.InitUserspaceShaper(nil)
128144

129145
privKey1, err := wgtypes.GeneratePrivateKey()
130146
if err != nil {
@@ -136,6 +152,50 @@ func TestShaperEnabled(t *testing.T) {
136152
t.Error(err)
137153
return
138154
}
155+
_, _ = privKey1, privKey2
156+
139157
startServer(t, privKey1, privKey2.PublicKey())
140158
startClient(t, privKey2, privKey1.PublicKey())
141159
}
160+
161+
// func TestMain(t *testing.T) {
162+
// // var (
163+
// // dnsResolverIP = "8.8.8.8:53" // Google DNS resolver.
164+
// // dnsResolverProto = "udp" // Protocol to use for the DNS resolver
165+
// // dnsResolverTimeoutMs = 5000 // Timeout (ms) for the DNS resolver (optional)
166+
// // )
167+
168+
// // dialer := &net.Dialer{
169+
// // Resolver: &net.Resolver{
170+
// // PreferGo: true,
171+
// // Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
172+
// // d := net.Dialer{
173+
// // Timeout: time.Duration(dnsResolverTimeoutMs) * time.Millisecond,
174+
// // }
175+
// // return d.DialContext(ctx, dnsResolverProto, dnsResolverIP)
176+
// // },
177+
// // },
178+
// // }
179+
180+
// // dialContext := func(ctx context.Context, network, addr string) (net.Conn, error) {
181+
// // return dialer.DialContext(ctx, network, addr)
182+
// // }
183+
// // _=dialContext
184+
185+
// //http.DefaultTransport.(*http.Transport).DialContext = dialContext
186+
// httpClient := &http.Client{}
187+
188+
// // Testing the new HTTP client with the custom DNS resolver.
189+
// resp, err := httpClient.Get("https://www.violetnorth.com")
190+
// if err != nil {
191+
// log.Fatalln(err)
192+
// }
193+
// defer resp.Body.Close()
194+
195+
// body, err := ioutil.ReadAll(resp.Body)
196+
// if err != nil {
197+
// log.Fatalln(err)
198+
// }
199+
200+
// log.Println(string(body))
201+
// }

e2e/gorunner/Dockerfile.precompiled

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ RUN ln -s /sbin/iptables /usr/sbin/iptables
55

66
COPY ./build/e2e/test /usr/local/bin/test
77
COPY ./build/e2e/deployer /usr/local/bin/deployer
8+
COPY ./build/e2e/bug6022.test /usr/local/bin/bug6022.test
9+
#COPY ./build/e2e/bug6022.aux /usr/local/bin/bug6022.aux

e2e/runner.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,39 @@ func (r *Runner) Test(providerHost string) (retErr error) {
9494
return
9595
}
9696

97+
// Test_ starts given provider and consumer nodes and runs e2e tests.
98+
func (r *Runner) Test_() (retErr error) {
99+
// services := strings.Split(r.services, ",")
100+
// if err := r.startProviderConsumerNodes(providerHost, services); err != nil {
101+
// retErr = errors.Wrap(err, "tests failed!")
102+
// return
103+
// }
104+
105+
// defer func() {
106+
// if err := r.stopProviderConsumerNodes(providerHost, services); err != nil {
107+
// log.Err(err).Msg("Could not stop provider consumer nodes")
108+
// }
109+
//
110+
// if retErr == nil { // check public IPs in logs only if all the tests succeeded
111+
// if err := r.checkPublicIPInLogs("myst-provider", "myst-consumer-wireguard"); err != nil {
112+
// retErr = errors.Wrap(err, "tests failed!")
113+
// return
114+
// }
115+
// }
116+
// }()
117+
118+
log.Info().Msg("Running tests for env: " + r.testEnv)
119+
log.Info().Msg("Running >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ")
120+
121+
err := r.compose("run", "go-runner",
122+
// "wget", "http://bug6022-aux:8083/test",
123+
"/usr/local/bin/bug6022.test",
124+
)
125+
126+
retErr = errors.Wrap(err, "tests failed!")
127+
return
128+
}
129+
97130
func (r *Runner) checkPublicIPInLogs(containers ...string) error {
98131
regExps := []*regexp.Regexp{
99132
regexp.MustCompile(`(^|[^0-9])(172\.30\.0\.2)($|[^0-9])`),
@@ -204,6 +237,25 @@ func (r *Runner) Init() error {
204237
return nil
205238
}
206239

240+
// Init_ starts bug6022.test dependency
241+
func (r *Runner) Init_() error {
242+
log.Info().Msg("Starting other services >>")
243+
if err := r.compose("pull"); err != nil {
244+
return errors.Wrap(err, "could not pull images")
245+
}
246+
247+
if err := r.compose("up", "-d", "bug6022-aux"); err != nil {
248+
return errors.Wrap(err, "starting other services failed!")
249+
}
250+
251+
log.Info().Msg("Building app images")
252+
if err := r.compose("build"); err != nil {
253+
return errors.Wrap(err, "building app images failed!")
254+
}
255+
256+
return nil
257+
}
258+
207259
func (r *Runner) startProviderConsumerNodes(providerHost string, services []string) error {
208260
log.Info().Msg("Starting provider consumer containers")
209261

0 commit comments

Comments
 (0)