@@ -3,12 +3,11 @@ package blockchain
33import (
44 "context"
55 "fmt"
6- "strconv"
76 "time"
87
98 "github.com/docker/docker/api/types/container"
9+ "github.com/docker/go-connections/nat"
1010 "github.com/testcontainers/testcontainers-go"
11- "github.com/testcontainers/testcontainers-go/network"
1211 "github.com/testcontainers/testcontainers-go/wait"
1312
1413 "github.com/smartcontractkit/chainlink-testing-framework/framework"
@@ -24,14 +23,8 @@ const (
2423 defaultTonHTTPServerPort = "8000"
2524 defaultLiteServerPort = "40000"
2625 defaultLiteServerPublicKey = "E7XwFSQzNkcRepUC23J2nRpASXpnsEKmyyHYV4u/FZY="
27- liteServerPortOffset = 100 // arbitrary offset for lite server port
2826)
2927
30- type portMapping struct {
31- HTTPServer string
32- LiteServer string
33- }
34-
3528func defaultTon (in * Input ) {
3629 if in .Image == "" {
3730 in .Image = "ghcr.io/neodix42/mylocalton-docker:latest"
@@ -44,15 +37,7 @@ func defaultTon(in *Input) {
4437func newTon (ctx context.Context , in * Input ) (* Output , error ) {
4538 defaultTon (in )
4639
47- base , err := strconv .Atoi (in .Port )
48- if err != nil {
49- return nil , fmt .Errorf ("invalid base port %s: %w" , in .Port , err )
50- }
51-
52- ports := & portMapping {
53- HTTPServer : in .Port ,
54- LiteServer : strconv .Itoa (base + liteServerPortOffset ),
55- }
40+ containerName := framework .DefaultTCName ("ton-genesis" )
5641
5742 baseEnv := map [string ]string {
5843 "GENESIS" : "true" ,
@@ -73,35 +58,24 @@ func newTon(ctx context.Context, in *Input) (*Output, error) {
7358 }
7459 }
7560
76- n , err := network .New (ctx ,
77- network .WithAttachable (),
78- network .WithLabels (framework .DefaultTCLabels ()),
79- )
80- if err != nil {
81- return nil , fmt .Errorf ("failed to create network: %w" , err )
82- }
83-
84- networkName := n .Name
85-
8661 if pods .K8sEnabled () {
8762 return nil , fmt .Errorf ("K8s support is not yet implemented" )
8863 }
8964
9065 req := testcontainers.ContainerRequest {
9166 Image : in .Image ,
9267 AlwaysPullImage : in .PullImage ,
93- Name : framework . DefaultTCName ( "ton-genesis" ) ,
68+ Name : containerName ,
9469 ExposedPorts : []string {
95- fmt .Sprintf ("%s:%s/tcp" , ports .HTTPServer , defaultTonHTTPServerPort ),
96- fmt .Sprintf ("%s:%s/tcp" , ports .LiteServer , defaultLiteServerPort ),
97- "40003/udp" ,
98- "40002/tcp" ,
99- "40001/udp" ,
70+ fmt .Sprintf ("%s/tcp" , defaultTonHTTPServerPort ),
71+ fmt .Sprintf ("%s/tcp" , defaultLiteServerPort ),
72+ },
73+ Networks : []string {framework .DefaultNetworkName },
74+ NetworkAliases : map [string ][]string {
75+ framework .DefaultNetworkName : {containerName },
10076 },
101- Networks : []string {networkName },
102- NetworkAliases : map [string ][]string {networkName : {"genesis" }},
103- Labels : framework .DefaultTCLabels (),
104- Env : finalEnv ,
77+ Labels : framework .DefaultTCLabels (),
78+ Env : finalEnv ,
10579 WaitingFor : wait .ForExec ([]string {
10680 "/usr/local/bin/lite-client" ,
10781 "-a" , fmt .Sprintf ("127.0.0.1:%s" , defaultLiteServerPort ),
@@ -110,15 +84,29 @@ func newTon(ctx context.Context, in *Input) (*Output, error) {
11084 }).WithStartupTimeout (2 * time .Minute ),
11185 Mounts : testcontainers.ContainerMounts {
11286 {
113- Source : testcontainers.GenericVolumeMountSource {Name : fmt .Sprintf ("shared -data-%s" , networkName )},
87+ Source : testcontainers.GenericVolumeMountSource {Name : fmt .Sprintf ("ton -data-%s" , containerName )},
11488 Target : "/usr/share/data" ,
11589 },
11690 {
117- Source : testcontainers.GenericVolumeMountSource {Name : fmt .Sprintf ("ton-db-%s" , networkName )},
91+ Source : testcontainers.GenericVolumeMountSource {Name : fmt .Sprintf ("ton-db-%s" , containerName )},
11892 Target : "/var/ton-work/db" ,
11993 },
12094 },
12195 HostConfigModifier : func (h * container.HostConfig ) {
96+ h .PortBindings = nat.PortMap {
97+ nat .Port (fmt .Sprintf ("%s/tcp" , defaultTonHTTPServerPort )): []nat.PortBinding {
98+ {
99+ HostIP : "0.0.0.0" ,
100+ HostPort : in .Port ,
101+ },
102+ },
103+ nat .Port (fmt .Sprintf ("%s/tcp" , defaultLiteServerPort )): []nat.PortBinding {
104+ {
105+ HostIP : "0.0.0.0" ,
106+ HostPort : "" , // Docker assigns a dynamic available port
107+ },
108+ },
109+ }
122110 framework .ResourceLimitsFunc (h , in .ContainerResources )
123111 },
124112 }
@@ -131,27 +119,32 @@ func newTon(ctx context.Context, in *Input) (*Output, error) {
131119 return nil , err
132120 }
133121
134- host , err := c . Host (ctx )
122+ host , err := framework . GetHostWithContext (ctx , c )
135123 if err != nil {
136124 return nil , err
137125 }
138126
139- name , err := c .Name (ctx )
127+ httpMappedPort , err := c .MappedPort (ctx , nat . Port ( fmt . Sprintf ( "%s/tcp" , defaultTonHTTPServerPort )) )
140128 if err != nil {
141- return nil , err
129+ return nil , fmt .Errorf ("failed to get mapped HTTP port: %w" , err )
130+ }
131+ lsMappedPort , err := c .MappedPort (ctx , nat .Port (fmt .Sprintf ("%s/tcp" , defaultLiteServerPort )))
132+ if err != nil {
133+ return nil , fmt .Errorf ("failed to get mapped LiteServer port: %w" , err )
142134 }
143135
144136 return & Output {
145137 UseCache : true ,
146138 ChainID : in .ChainID ,
147139 Type : in .Type ,
148140 Family : FamilyTon ,
149- ContainerName : name ,
141+ ContainerName : containerName ,
150142 Container : c ,
151143 Nodes : []* Node {{
152- // URLs now contain liteserver://publickey@host:port
153- ExternalHTTPUrl : fmt .Sprintf ("liteserver://%s@%s:%s" , defaultLiteServerPublicKey , host , ports .LiteServer ),
154- InternalHTTPUrl : fmt .Sprintf ("liteserver://%s@%s:%s" , defaultLiteServerPublicKey , name , ports .LiteServer ),
144+ ExternalHTTPUrl : fmt .Sprintf ("liteserver://%s@%s:%s" , defaultLiteServerPublicKey , host , lsMappedPort .Port ()),
145+ InternalHTTPUrl : fmt .Sprintf ("liteserver://%s@%s:%s" , defaultLiteServerPublicKey , containerName , defaultLiteServerPort ),
146+ ExternalWSUrl : fmt .Sprintf ("http://%s:%s" , host , httpMappedPort .Port ()),
147+ InternalWSUrl : fmt .Sprintf ("http://%s:%s" , containerName , defaultTonHTTPServerPort ),
155148 }},
156149 }, nil
157150}
0 commit comments