github.com/loomnetwork/gamechain@v0.0.0-20200406110549-36c47eb97a92/tools/gamechain-logger/cmd/handler_test.go (about) 1 package cmd 2 3 import ( 4 "log" 5 "os" 6 "strings" 7 "testing" 8 9 "github.com/gogo/protobuf/jsonpb" 10 "github.com/jinzhu/gorm" 11 _ "github.com/jinzhu/gorm/dialects/sqlite" 12 "github.com/loomnetwork/go-loom/plugin/types" 13 "github.com/loomnetwork/gamechain/tools/gamechain-logger/models" 14 assert "github.com/stretchr/testify/require" 15 ) 16 17 const event1 = `{ 18 "topics": [ 19 "createaccount" 20 ], 21 "caller": { 22 "chain_id": "default", 23 "local": "PMEMWadk5kzr4wTe3SQjUSUjQ9Q=" 24 }, 25 "address": { 26 "chain_id": "default", 27 "local": "4ojW7scVDWoi/eM/CqLYHgZZHE0=" 28 }, 29 "plugin_name": "zombiebattleground:1.0.0", 30 "block_height": 170961, 31 "encoded_body": "eyJPd25lciI6ImxvY2s1IiwiTWV0aG9kIjoiY3JlYXRlYWNjb3VudCIsIkFkZHIiOiJQTUVNV2FkazVrenI0d1RlM1NRalVTVWpROVE9In0=", 32 "original_request": "Cg1DcmVhdGVBY2NvdW50EhQKBWxvY2s1KgVJbWFnZUgBUgJ2MQ==" 33 }` 34 35 const FindMatchEvent1 = `{"topics":["match:1","findmatch"],"caller":{"chain_id":"default","local":"xmOaJA2CIOecyHvkyJNo8WJjCkg="},"address":{"chain_id":"default","local":"4ojW7scVDWoi/eM/CqLYHgZZHE0="},"plugin_name":"zombiebattleground:1.0.0","block_height":18,"encoded_body":"ErsECAESB21hdGNoOjEa+QEKB3BsYXllcjYa7QEIARIHRGVmYXVsdBgEIgoKBlBvaXpvbRAEIgoKBkhhem1hehACIgoKBlplZXRlchABIg0KCVpoYXR0ZXJlchAEIgoKBlpsdWRnZRACIgsKB1pub3dtYW4QBCILCgdaLVZpcnVzEAEiCAoER2FlYRABIg8KC0VhcnRoc2hha2VyEAEiCgoGWmVwdGljEAEiCQoFR2hvdWwQASILCgdIYXp6YXJkEAEiDQoJRWN0b3BsYXNtEAEiCwoHQm91bmNlchACIgsKB1N0YXBsZXIQASIPCgtHb28gQm90dGxlcxABIgwKCENoYWluc2F3EAIa+QEKB3BsYXllcjca7QEIARIHRGVmYXVsdBgEIgoKBlBvaXpvbRAEIgoKBkhhem1hehACIgoKBlplZXRlchABIg0KCVpoYXR0ZXJlchAEIgoKBlpsdWRnZRACIgsKB1pub3dtYW4QBCILCgdaLVZpcnVzEAEiCAoER2FlYRABIg8KC0VhcnRoc2hha2VyEAEiCgoGWmVwdGljEAEiCQoFR2hvdWwQASILCgdIYXp6YXJkEAEiDQoJRWN0b3BsYXNtEAEiCwoHQm91bmNlchACIgsKB1N0YXBsZXIQASIPCgtHb28gQm90dGxlcxABIgwKCENoYWluc2F3EAIgASoCdjMwhom04QVAhom04QVSDwoHcGxheWVyNhCGibThBVIPCgdwbGF5ZXI3EIaJtOEFWgBaAA==","original_request":"CglGaW5kTWF0Y2gSCQoHcGxheWVyNg=="}` 36 const AcceptMatchEvent = `{"topics":["match:1","acceptmatch"],"caller":{"chain_id":"default","local":"xmOaJA2CIOecyHvkyJNo8WJjCkg="},"address":{"chain_id":"default","local":"4ojW7scVDWoi/eM/CqLYHgZZHE0="},"plugin_name":"zombiebattleground:1.0.0","block_height":20,"encoded_body":"Er0ECAESB21hdGNoOjEa+wEKB3BsYXllcjYQARrtAQgBEgdEZWZhdWx0GAQiCgoGUG9pem9tEAQiCgoGSGF6bWF6EAIiCgoGWmVldGVyEAEiDQoJWmhhdHRlcmVyEAQiCgoGWmx1ZGdlEAIiCwoHWm5vd21hbhAEIgsKB1otVmlydXMQASIICgRHYWVhEAEiDwoLRWFydGhzaGFrZXIQASIKCgZaZXB0aWMQASIJCgVHaG91bBABIgsKB0hhenphcmQQASINCglFY3RvcGxhc20QASILCgdCb3VuY2VyEAIiCwoHU3RhcGxlchABIg8KC0dvbyBCb3R0bGVzEAEiDAoIQ2hhaW5zYXcQAhr5AQoHcGxheWVyNxrtAQgBEgdEZWZhdWx0GAQiCgoGUG9pem9tEAQiCgoGSGF6bWF6EAIiCgoGWmVldGVyEAEiDQoJWmhhdHRlcmVyEAQiCgoGWmx1ZGdlEAIiCwoHWm5vd21hbhAEIgsKB1otVmlydXMQASIICgRHYWVhEAEiDwoLRWFydGhzaGFrZXIQASIKCgZaZXB0aWMQASIJCgVHaG91bBABIgsKB0hhenphcmQQASINCglFY3RvcGxhc20QASILCgdCb3VuY2VyEAIiCwoHU3RhcGxlchABIg8KC0dvbyBCb3R0bGVzEAEiDAoIQ2hhaW5zYXcQAiABKgJ2MzCGibThBUCGibThBVIPCgdwbGF5ZXI2EIaJtOEFUg8KB3BsYXllcjcQhom04QVaAFoA","original_request":"CgtBY2NlcHRNYXRjaBILCgdwbGF5ZXI2EAE="}` 37 const CreateDeckEvent = `{"topics":["createdeck"],"caller":{"chain_id":"default","local":"xmOaJA2CIOecyHvkyJNo8WJjCkg="},"address":{"chain_id":"default","local":"4ojW7scVDWoi/eM/CqLYHgZZHE0="},"plugin_name":"zombiebattleground:1.0.0","block_height":26,"encoded_body":"CgdwbGF5ZXIxEioweGM2NjM5YTI0MGQ4MjIwZTc5Y0M4N2JlNEM4OTM2OEYxNjI2MzBBNDgaKAgCEghOZXdEZWNrNxgBIgsKB1B5cm9tYXoQAiILCgdCdXJycm5uEAEiAnYz","original_request":"CgpDcmVhdGVEZWNrEjUKB3BsYXllcjESJhIITmV3RGVjazcYASILCgdQeXJvbWF6EAIiCwoHQnVycnJubhABIgJ2Mw=="}` 38 const EditDeckEvent = `{"topics":["editdeck"],"caller":{"chain_id":"default","local":"xmOaJA2CIOecyHvkyJNo8WJjCkg="},"address":{"chain_id":"default","local":"4ojW7scVDWoi/eM/CqLYHgZZHE0="},"plugin_name":"zombiebattleground:1.0.0","block_height":32,"encoded_body":"CgdwbGF5ZXIxEioweGM2NjM5YTI0MGQ4MjIwZTc5Y0M4N2JlNEM4OTM2OEYxNjI2MzBBNDgaHwgCEgxOZXdEZWNrN2FzZGYYASILCgdQeXJvbWF6EAMiAnYz","original_request":"CghFZGl0RGVjaxIuCgdwbGF5ZXIxEh8IAhIMTmV3RGVjazdhc2RmGAEiCwoHUHlyb21hehADIgJ2Mw=="}` 39 const DeleteDeckEvent = `{"topics":["deletedeck"],"caller":{"chain_id":"default","local":"xmOaJA2CIOecyHvkyJNo8WJjCkg="},"address":{"chain_id":"default","local":"4ojW7scVDWoi/eM/CqLYHgZZHE0="},"plugin_name":"zombiebattleground:1.0.0","block_height":34,"encoded_body":"CgdwbGF5ZXIxEioweGM2NjM5YTI0MGQ4MjIwZTc5Y0M4N2JlNEM4OTM2OEYxNjI2MzBBNDgYAg==","original_request":"CgpEZWxldGVEZWNrEgsKB3BsYXllcjEQAg=="}` 40 41 func ConnectDB(dbName string) *gorm.DB { 42 db, err := gorm.Open("sqlite3", "/tmp/gorm.db") 43 if err != nil { 44 log.Printf("Got error when connect database, the error is '%v'", err) 45 } 46 return db 47 } 48 49 func DropDB() { 50 // db := ConnectDB("mysql") 51 // defer db.Close() 52 // db.Exec("drop database if exists gamechain_logger_test;") 53 err := os.Remove("/tmp/gorm.db") 54 if err != nil { 55 log.Println(err) 56 } 57 } 58 59 func CreateDB() { 60 db := ConnectDB("mysql") 61 defer db.Close() 62 // db.Exec("create database gamechain_logger_test;") 63 } 64 65 func InitDB() *gorm.DB { 66 CreateDB() 67 db := ConnectDB("gamechain_logger_test") 68 69 db.LogMode(true) 70 71 if err := db.AutoMigrate(&models.Match{}).Error; err != nil { 72 panic(err) 73 } 74 if err := db.AutoMigrate(&models.Deck{}).Error; err != nil { 75 panic(err) 76 } 77 if err := db.AutoMigrate(&models.Replay{}).Error; err != nil { 78 panic(err) 79 } 80 if err := db.AutoMigrate(&models.ZbHeightCheck{}).Error; err != nil { 81 panic(err) 82 } 83 84 return db 85 } 86 func TestEventHandlers(t *testing.T) { 87 DropDB() 88 db := InitDB() 89 90 var eventData types.EventData 91 var unmarshaler jsonpb.Unmarshaler 92 93 // FindMatch event 94 err := unmarshaler.Unmarshal(strings.NewReader(FindMatchEvent1), &eventData) 95 assert.Nil(t, err) 96 97 err = FindMatchHandler(&eventData, db) 98 assert.Nil(t, err) 99 100 match := models.Match{} 101 err = db.First(&match, 1).Error 102 assert.Nil(t, err) 103 assert.Equal(t, "player6", match.Player1ID) 104 assert.Equal(t, "player7", match.Player2ID) 105 assert.Equal(t, false, match.Player1Accepted) 106 assert.Equal(t, false, match.Player2Accepted) 107 108 // AcceptMatch event 109 err = unmarshaler.Unmarshal(strings.NewReader(AcceptMatchEvent), &eventData) 110 assert.Nil(t, err) 111 112 err = AcceptMatchHandler(&eventData, db) 113 assert.Nil(t, err) 114 115 err = db.First(&match, 1).Error 116 assert.Nil(t, err) 117 assert.Equal(t, "player6", match.Player1ID) 118 assert.Equal(t, "player7", match.Player2ID) 119 assert.Equal(t, true, match.Player1Accepted) 120 assert.Equal(t, false, match.Player2Accepted) 121 122 // CreateDeck event 123 err = unmarshaler.Unmarshal(strings.NewReader(CreateDeckEvent), &eventData) 124 assert.Nil(t, err) 125 126 err = CreateDeckHandler(&eventData, db) 127 assert.Nil(t, err) 128 129 deck := models.Deck{} 130 err = db.First(&deck).Error 131 assert.Nil(t, err) 132 assert.Equal(t, "NewDeck7", deck.Name) 133 assert.Equal(t, "player1", deck.UserID) 134 135 // EditDeck event 136 err = unmarshaler.Unmarshal(strings.NewReader(EditDeckEvent), &eventData) 137 assert.Nil(t, err) 138 139 err = EditDeckHandler(&eventData, db) 140 assert.Nil(t, err) 141 142 err = db.First(&deck).Error 143 assert.Nil(t, err) 144 assert.Equal(t, "NewDeck7", deck.Name) 145 assert.Equal(t, "player1", deck.UserID) 146 147 // DeleteDeck event 148 err = unmarshaler.Unmarshal(strings.NewReader(DeleteDeckEvent), &eventData) 149 assert.Nil(t, err) 150 151 err = DeleteDeckHandler(&eventData, db) 152 assert.Nil(t, err) 153 154 db.Close() 155 DropDB() 156 }