github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/plugin_api_tests/test_db_driver/main.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package main_test
     5  
     6  import (
     7  	"database/sql"
     8  	"testing"
     9  
    10  	"github.com/masterhung0112/hk_server/v5/app/plugin_api_tests"
    11  	"github.com/masterhung0112/hk_server/v5/model"
    12  	"github.com/masterhung0112/hk_server/v5/plugin"
    13  	"github.com/masterhung0112/hk_server/v5/shared/driver"
    14  	"github.com/masterhung0112/hk_server/v5/store/sqlstore"
    15  	"github.com/masterhung0112/hk_server/v5/store/storetest"
    16  )
    17  
    18  type MyPlugin struct {
    19  	plugin.MattermostPlugin
    20  	config plugin_api_tests.BasicConfig
    21  	t      *testing.T
    22  }
    23  
    24  func (p *MyPlugin) OnConfigurationChange() error {
    25  	if err := p.API.LoadPluginConfiguration(&p.config); err != nil {
    26  		return err
    27  	}
    28  	return nil
    29  }
    30  
    31  func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
    32  	store := sqlstore.New(p.API.GetUnsanitizedConfig().SqlSettings, nil)
    33  	store.GetMaster().Db.Close()
    34  
    35  	for _, isMaster := range []bool{true, false} {
    36  		// We replace the master DB with master and replica both just to make
    37  		// gorp APIs work.
    38  		store.GetMaster().Db = sql.OpenDB(driver.NewConnector(p.Driver, isMaster))
    39  
    40  		// Testing with a handful of stores
    41  		// storetest.TestPostStore(p.t, store, store)
    42  		storetest.StoreTestSuiteExecute(p.t, &storetest.PostStoreTestSuite{}, store, store)
    43  		storetest.StoreTestSuiteExecute(p.t, &storetest.UserStoreTS{}, store, store)
    44  		storetest.StoreTestSuiteExecute(p.t, &storetest.UserStoreGetAllProfilesTS{}, store, store)
    45  		storetest.StoreTestSuiteExecute(p.t, &storetest.UserStoreGetProfilesTS{}, store, store)
    46  		storetest.StoreTestSuiteExecute(p.t, &storetest.UserStoreGetProfilesByIdsTS{}, store, store)
    47  
    48  		// storetest.TestUserStore(p.t, store, store)
    49  		// storetest.TestTeamStore(p.t, store)
    50  		storetest.StoreTestSuiteExecute(p.t, &storetest.TeamStoreTestSuite{}, store, store)
    51  		// storetest.TestChannelStore(p.t, store, store)
    52  		storetest.StoreTestSuiteExecute(p.t, &storetest.ChannelStoreTestSuite{}, store, store)
    53  		// storetest.TestBotStore(p.t, store, store)
    54  
    55  		store.GetMaster().Db.Close()
    56  	}
    57  
    58  	// Use the API to instantiate the driver
    59  	// And then run the full suite of tests.
    60  	return nil, "OK"
    61  }
    62  
    63  // TestDBAPI is a test function which actually runs a plugin. The objective
    64  // is to run the storetest suite from inside a plugin.
    65  //
    66  // The test runner compiles the test code to a binary, and runs it as a normal
    67  // binary. But under the hood, a test runs.
    68  func TestDBAPI(t *testing.T) {
    69  	plugin.ClientMain(&MyPlugin{t: t})
    70  }