Skip to content

Commit 4eddc7b

Browse files
committed
Resolve merge conflicts: integrate AI extension with database drivers
- Merged AI extension functionality from HEAD branch - Integrated Cassandra driver support from origin/master - Regenerated protobuf files to resolve conflicts - Combined storeExtensions with new AI parameters and database drivers
2 parents e0bdb76 + b47ffd1 commit 4eddc7b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+7141
-3828
lines changed

.editorconfig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ root = true
77
[*]
88
end_of_line = lf
99
insert_final_newline = true
10+
trim_trailing_whitespace = true
1011
charset = utf-8
1112

1213
# 4 space indentation
13-
[*.{py,proto,go,js,ts,json,vue}]
14+
[*.{py,proto,js,ts,json,vue}]
1415
indent_style = space
1516
indent_size = 4
17+
18+
[*.go]
19+
indent_style = tab

.gitignore

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,11 @@ console/atest-desktop/atest.exe
2121
console/atest-desktop/coverage
2222
atest-store-git
2323
.db
24-
.marscode/
24+
.marscode/
25+
e2e/test.pem
26+
e2e/test.csr
27+
e2e/test.key
28+
e2e/server.srl
29+
e2e/server.key
30+
e2e/server.csr
31+
e2e/server.crt

cmd/function.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package cmd
1818

1919
import (
2020
"context"
21+
"errors"
2122
"fmt"
2223
"go/ast"
2324
"go/doc"
@@ -44,14 +45,27 @@ func createFunctionCmd() (c *cobra.Command) {
4445
}
4546
flags := c.Flags()
4647
flags.StringVarP(&opt.feature, "feature", "", "", "The feature query")
48+
flags.StringVarP(&opt.extensionFile, "extension-file", "", "", "The extension file")
4749
return
4850
}
4951

5052
type funcPrinterOption struct {
51-
feature string
53+
feature string
54+
extensionFile string
5255
}
5356

5457
func (o *funcPrinterOption) runE(cmd *cobra.Command, args []string) (err error) {
58+
if o.extensionFile != "" {
59+
var tpl *render.UserDefinedTemplates
60+
if tpl, err = render.ParseUserDefinedTemplatesFromFile(o.extensionFile); err != nil {
61+
return
62+
}
63+
64+
if err = errors.Join(err, tpl.Validate(), tpl.ConflictWith(render.FuncMap())); err != nil {
65+
return
66+
}
67+
}
68+
5569
if len(args) > 0 {
5670
name := args[0]
5771
filterAndPrint(cmd, name)

cmd/function_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func TestCreateFunctionCommand(t *testing.T) {
2929
tests := []struct {
3030
name string
3131
args []string
32+
hasErr bool
3233
verify func(t *testing.T, output string)
3334
}{{
3435
name: "normal",
@@ -61,6 +62,13 @@ func TestCreateFunctionCommand(t *testing.T) {
6162
assert.Equal(t, `{{generateJSONString "name"}}
6263
`, output)
6364
},
65+
}, {
66+
name: "verify template functions with error",
67+
args: []string{"func", "--extension-file", "testdata/function-with-conflicts.yaml"},
68+
hasErr: true,
69+
verify: func(t *testing.T, output string) {
70+
assert.Contains(t, output, "conflict with existing function")
71+
},
6472
}}
6573
for _, tt := range tests {
6674
t.Run(tt.name, func(t *testing.T) {
@@ -69,10 +77,15 @@ func TestCreateFunctionCommand(t *testing.T) {
6977

7078
buf := new(bytes.Buffer)
7179
c.SetOut(buf)
80+
c.SetErr(buf)
7281
c.SetArgs(tt.args)
7382

7483
err := c.Execute()
75-
assert.NoError(t, err)
84+
if tt.hasErr {
85+
assert.Error(t, err)
86+
} else {
87+
assert.NoError(t, err)
88+
}
7689

7790
if tt.verify != nil {
7891
tt.verify(t, buf.String())

cmd/mock.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ type mockOption struct {
3131
port int
3232
prefix string
3333
metrics bool
34+
tls bool
35+
tlsCert string
36+
tlsKey string
3437
}
3538

3639
func createMockCmd() (c *cobra.Command) {
@@ -47,12 +50,18 @@ func createMockCmd() (c *cobra.Command) {
4750
flags.IntVarP(&opt.port, "port", "", 6060, "The mock server port")
4851
flags.StringVarP(&opt.prefix, "prefix", "", "/mock", "The mock server API prefix")
4952
flags.BoolVarP(&opt.metrics, "metrics", "m", true, "Enable request metrics collection")
53+
flags.BoolVarP(&opt.tls, "tls", "", false, "Enable TLS mode. Set to true to enable TLS. Alow SAN certificates")
54+
flags.StringVarP(&opt.tlsCert, "cert-file", "", "", "The path to the certificate file, Alow SAN certificates")
55+
flags.StringVarP(&opt.tlsKey, "key-file", "", "", "The path to the key file, Alow SAN certificates")
5056
return
5157
}
5258

5359
func (o *mockOption) runE(c *cobra.Command, args []string) (err error) {
5460
reader := mock.NewLocalFileReader(args[0])
5561
server := mock.NewInMemoryServer(c.Context(), o.port)
62+
if o.tls {
63+
server.WithTLS(o.tlsCert, o.tlsKey)
64+
}
5665
if o.metrics {
5766
server.EnableMetrics()
5867
}

cmd/server.go

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ func createServerCmd(execer fakeruntime.Execer, httpServer server.HTTPServer) (c
109109

110110
// gc related flags
111111
flags.IntVarP(&opt.gcPercent, "gc-percent", "", 100, "The GC percent of Go")
112-
//grpc_tls
113-
flags.BoolVarP(&opt.tls, "tls-grpc", "", false, "Enable TLS mode. Set to true to enable TLS. Alow SAN certificates")
112+
113+
flags.BoolVarP(&opt.tls, "tls", "", false, "Enable TLS mode. Set to true to enable TLS. Alow SAN certificates")
114114
flags.StringVarP(&opt.tlsCert, "cert-file", "", "", "The path to the certificate file, Alow SAN certificates")
115115
flags.StringVarP(&opt.tlsKey, "key-file", "", "", "The path to the key file, Alow SAN certificates")
116116

@@ -124,8 +124,12 @@ type serverOption struct {
124124
httpServer server.HTTPServer
125125
execer fakeruntime.Execer
126126

127-
port int
128-
httpPort int
127+
port int
128+
httpPort int
129+
tls bool
130+
tlsCert string
131+
tlsKey string
132+
129133
printProto bool
130134
localStorage []string
131135
consolePath string
@@ -148,17 +152,12 @@ type serverOption struct {
148152
mockConfig []string
149153
mockPrefix string
150154

151-
gcPercent int
152-
153-
dryRun bool
154-
155+
gcPercent int
156+
dryRun bool
155157
grpcMaxRecvMsgSize int
156158

157159
// inner fields, not as command flags
158160
provider oauth.OAuthProvider
159-
tls bool
160-
tlsCert string
161-
tlsKey string
162161
}
163162

164163
func (o *serverOption) preRunE(cmd *cobra.Command, args []string) (err error) {
@@ -190,15 +189,20 @@ func (o *serverOption) preRunE(cmd *cobra.Command, args []string) (err error) {
190189

191190
grpcOpts = append(grpcOpts, atestoauth.NewAuthInterceptor(o.oauthGroup))
192191
}
192+
193193
if o.tls {
194194
if o.tlsCert != "" && o.tlsKey != "" {
195195
creds, err := credentials.NewServerTLSFromFile(o.tlsCert, o.tlsKey)
196196
if err != nil {
197197
return fmt.Errorf("failed to load credentials: %v", err)
198198
}
199199
grpcOpts = append(grpcOpts, grpc.Creds(creds))
200+
} else {
201+
err = fmt.Errorf("both --cert-file and --key-file flags are required when --tls is enabled")
202+
return
200203
}
201204
}
205+
202206
if o.dryRun {
203207
o.gRPCServer = &fakeGRPCServer{}
204208
} else {
@@ -260,13 +264,12 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
260264
storeExtMgr := server.NewStoreExtManager(o.execer)
261265
storeExtMgr.WithDownloader(extDownloader)
262266
remoteServer := server.NewRemoteServer(loader, remote.NewGRPCloaderFromStore(), secretServer, storeExtMgr, o.configDir, o.grpcMaxRecvMsgSize)
263-
kinds, storeKindsErr := remoteServer.GetStoreKinds(ctx, nil)
264-
if storeKindsErr != nil {
265-
cmd.PrintErrf("failed to get store kinds, error: %v\n", storeKindsErr)
266-
} else {
267-
if runPluginErr := startPlugins(storeExtMgr, kinds); runPluginErr != nil {
267+
if stores, storeErr := remoteServer.GetStores(ctx, nil); storeErr == nil {
268+
if runPluginErr := startPlugins(storeExtMgr, stores); runPluginErr != nil {
268269
cmd.PrintErrf("error occurred during starting plugins, error: %v\n", runPluginErr)
269270
}
271+
} else {
272+
cmd.PrintErrf("error occurred during getting stores, error: %v\n", storeErr)
270273
}
271274

272275
// create mock server controller
@@ -278,7 +281,7 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
278281
mockWriter = mock.NewInMemoryReader("")
279282
}
280283

281-
dynamicMockServer := mock.NewInMemoryServer(cmd.Context(), 0)
284+
dynamicMockServer := mock.NewInMemoryServer(cmd.Context(), 0).WithTLS(o.tlsCert, o.tlsKey)
282285
mockServerController := server.NewMockServerController(mockWriter, dynamicMockServer, o.httpPort)
283286

284287
clean := make(chan os.Signal, 1)
@@ -293,6 +296,7 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
293296
server.RegisterMockServer(s, mockServerController)
294297
server.RegisterDataServerServer(s, remoteServer.(server.DataServerServer))
295298
server.RegisterThemeExtensionServer(s, remoteServer.(server.ThemeExtensionServer))
299+
server.RegisterUIExtensionServer(s, remoteServer.(server.UIExtensionServer))
296300
serverLogger.Info("gRPC server listening at", "addr", lis.Addr())
297301
s.Serve(lis)
298302
}()
@@ -330,23 +334,30 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
330334
gRPCServerAddr := fmt.Sprintf("127.0.0.1:%s", gRPCServerPort)
331335

332336
if o.tls {
333-
creds, err := credentials.NewClientTLSFromFile(o.tlsCert, "localhost")
337+
var creds credentials.TransportCredentials
338+
creds, err = credentials.NewClientTLSFromFile(o.tlsCert, "127.0.0.1")
334339
if err != nil {
335340
return fmt.Errorf("failed to load credentials: %v", err)
336341
}
342+
343+
opts := []grpc.DialOption{grpc.WithTransportCredentials(creds)}
337344
err = errors.Join(
338-
server.RegisterRunnerHandlerFromEndpoint(ctx, mux, gRPCServerAddr, []grpc.DialOption{grpc.WithTransportCredentials(creds)}),
339-
server.RegisterMockHandlerFromEndpoint(ctx, mux, gRPCServerAddr, []grpc.DialOption{grpc.WithTransportCredentials(creds)}),
340-
server.RegisterThemeExtensionHandlerFromEndpoint(ctx, mux, gRPCServerAddr, []grpc.DialOption{grpc.WithTransportCredentials(creds)}),
341-
server.RegisterDataServerHandlerFromEndpoint(ctx, mux, gRPCServerAddr, []grpc.DialOption{grpc.WithTransportCredentials(creds)}))
345+
server.RegisterRunnerHandlerFromEndpoint(ctx, mux, gRPCServerAddr, opts),
346+
server.RegisterMockHandlerFromEndpoint(ctx, mux, gRPCServerAddr, opts),
347+
server.RegisterThemeExtensionHandlerFromEndpoint(ctx, mux, gRPCServerAddr, opts),
348+
server.RegisterDataServerHandlerFromEndpoint(ctx, mux, gRPCServerAddr, opts),
349+
server.RegisterUIExtensionHandlerFromEndpoint(ctx, mux, gRPCServerAddr, opts),
350+
)
342351
} else {
343352
dialOption := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials()),
344353
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt))}
345354
err = errors.Join(
346355
server.RegisterRunnerHandlerFromEndpoint(ctx, mux, gRPCServerAddr, dialOption),
347356
server.RegisterMockHandlerFromEndpoint(ctx, mux, gRPCServerAddr, dialOption),
348357
server.RegisterThemeExtensionHandlerFromEndpoint(ctx, mux, gRPCServerAddr, dialOption),
349-
server.RegisterDataServerHandlerFromEndpoint(ctx, mux, gRPCServerAddr, dialOption))
358+
server.RegisterDataServerHandlerFromEndpoint(ctx, mux, gRPCServerAddr, dialOption),
359+
server.RegisterUIExtensionHandlerFromEndpoint(ctx, mux, gRPCServerAddr, dialOption),
360+
)
350361
}
351362

352363
if err == nil {
@@ -426,13 +437,14 @@ func postRequestProxy(proxy string) func(w http.ResponseWriter, r *http.Request,
426437
}
427438
}
428439

429-
func startPlugins(storeExtMgr server.ExtManager, kinds *server.StoreKinds) (err error) {
430-
const socketPrefix = "unix://"
431-
432-
for _, kind := range kinds.Data {
433-
if kind.Enabled && (strings.HasPrefix(kind.Url, socketPrefix) || strings.Contains(kind.Url, ":")) {
434-
err = errors.Join(err, storeExtMgr.Start(kind.Name, kind.Url))
440+
func startPlugins(storeExtMgr server.ExtManager, stores *server.Stores) (err error) {
441+
for _, store := range stores.Data {
442+
if store.Disabled || store.Kind == nil {
443+
continue
435444
}
445+
446+
kind := store.Kind
447+
err = errors.Join(err, storeExtMgr.Start(kind.Name, kind.Url))
436448
}
437449
return
438450
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
items:
2+
- name: randEnum
3+
render: |
4+
{{ randInt 18 60 }}
-2.91 KB
Binary file not shown.
-3.41 KB
Binary file not shown.
-10.8 KB
Binary file not shown.

0 commit comments

Comments
 (0)