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  }