Commit b0d6c0b4 authored by vicotor's avatar vicotor

update for delete swap token

parent 6ebef55e
......@@ -433,6 +433,28 @@ func (s *Dao) filterSwapConfigChanged(chain ChainInterface, txLog *types.Log, ct
info.TokenName = tokenInfo.Symbol
}
if configure.Swap == (common.Address{}) && len(configure.Path) == 0 {
// delete swap config
err = s.DeleteSwapToken(ctx, info)
if err != nil {
log.WithFields(log.Fields{
"chain": chain.Name(),
"token": configure.FromToken.Hex(),
"toToken": configure.ToToken.Hex(),
"swap": configure.Swap.Hex(),
}).WithError(err).Error("db delete swap token config failed")
return err
} else {
log.WithFields(log.Fields{
"chain": chain.Name(),
"token": configure.FromToken.Hex(),
"toToken": configure.ToToken.Hex(),
"swap": configure.Swap.Hex(),
}).Info("delete swap token config success")
return nil
}
}
err = s.CreateSwapTokenInfo(ctx, info)
if err != nil {
log.WithFields(log.Fields{
......
......@@ -241,3 +241,11 @@ func (d *Dao) CreateSwapTokenInfo(ctx context.Context, info *dbModel.SwapTokenIn
_, err := collection.UpdateOne(ctx, filter, update, opts)
return err
}
func (d *Dao) DeleteSwapToken(ctx context.Context, info *dbModel.SwapTokenInfo) error {
collection := d.db.Collection(info.TableName())
filter := bson.M{"chain_id": info.ChainId, "token": info.Token, "to_token": info.ToToken, "contract": info.Contract}
_, err := collection.DeleteOne(ctx, filter)
return err
}
package dao
import (
"context"
"fmt"
"net/url"
"os"
"testing"
"time"
dbModel "code.wuban.net.cn/movabridge/bridge-backend/model/db"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func TestDeleteSwapToken(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
uri := os.Getenv("MONGO_TEST_URI")
if uri == "" {
user := "root"
pass := "XN2UARuys3zy4Oux"
authSource := "admin"
// Build credentialed URI. url.QueryEscape to safely encode special chars.
uri = fmt.Sprintf("mongodb://%s:%s@localhost:27017/bridge?authSource=%s&authMechanism=SCRAM-SHA-256",
url.QueryEscape(user), url.QueryEscape(pass), url.QueryEscape(authSource))
}
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
if err != nil {
// If credentials are required but missing, surface a clearer message.
if os.Getenv("MONGO_TEST_USER") != "" || os.Getenv("MONGO_TEST_PASS") != "" {
// Provide hint instead of generic failure.
t.Fatalf("mongo connect error with credentials (URI=%s): %v", uri, err)
}
// Generic failure.
t.Fatalf("mongo connect error: %v", err)
}
defer func() { _ = client.Disconnect(ctx) }()
dbName := "movabridge_test"
db := client.Database(dbName)
d := &Dao{db: db}
// prepare test data
info := &dbModel.SwapTokenInfo{
ChainId: 1,
Token: "test-token",
Contract: "0xdeadbeef",
ToToken: "to-token",
}
// ensure clean state
coll := db.Collection(info.TableName())
_, _ = coll.DeleteMany(ctx, bson.M{
"chain_id": info.ChainId,
"token": info.Token,
"contract": info.Contract,
})
// insert
if err := d.CreateSwapTokenInfo(ctx, info); err != nil {
// If insert fails due to auth issues, abort early.
t.Fatalf("CreateSwapTokenInfo failed: %v", err)
}
// verify inserted
var found dbModel.SwapTokenInfo
filter := bson.M{"chain_id": info.ChainId, "token": info.Token, "contract": info.Contract}
if err := coll.FindOne(ctx, filter).Decode(&found); err != nil {
t.Fatalf("expected document to exist after insert: %v", err)
}
// delete via method under test
if err := d.DeleteSwapToken(ctx, info); err != nil {
t.Fatalf("DeleteSwapToken failed: %v", err)
}
// verify deleted
err = coll.FindOne(ctx, filter).Decode(&found)
if err != mongo.ErrNoDocuments {
t.Fatalf("expected document to be deleted, got: %v", err)
}
// cleanup
_ = coll.Drop(ctx)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment