github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/migrations/helper_test.go (about)

     1  // Copyright (c) 2016-present Xenia, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package migrations
     5  
     6  import (
     7  	"os"
     8  	"time"
     9  
    10  	"github.com/xzl8028/xenia-server/app"
    11  	"github.com/xzl8028/xenia-server/config"
    12  	"github.com/xzl8028/xenia-server/mlog"
    13  	"github.com/xzl8028/xenia-server/model"
    14  	"github.com/xzl8028/xenia-server/utils"
    15  )
    16  
    17  type TestHelper struct {
    18  	App          *app.App
    19  	Server       *app.Server
    20  	BasicTeam    *model.Team
    21  	BasicUser    *model.User
    22  	BasicUser2   *model.User
    23  	BasicChannel *model.Channel
    24  	BasicPost    *model.Post
    25  
    26  	SystemAdminUser *model.User
    27  
    28  	tempWorkspace string
    29  }
    30  
    31  func setupTestHelper(enterprise bool) *TestHelper {
    32  	store := mainHelper.GetStore()
    33  	store.DropAllTables()
    34  
    35  	memoryStore, err := config.NewMemoryStore()
    36  	if err != nil {
    37  		panic("failed to initialize memory store: " + err.Error())
    38  	}
    39  
    40  	var options []app.Option
    41  	options = append(options, app.ConfigStore(memoryStore))
    42  	options = append(options, app.StoreOverride(mainHelper.Store))
    43  
    44  	s, err := app.NewServer(options...)
    45  	if err != nil {
    46  		panic(err)
    47  	}
    48  
    49  	th := &TestHelper{
    50  		App:    s.FakeApp(),
    51  		Server: s,
    52  	}
    53  
    54  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.MaxUsersPerTeam = 50 })
    55  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.RateLimitSettings.Enable = false })
    56  	prevListenAddress := *th.App.Config().ServiceSettings.ListenAddress
    57  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.ListenAddress = ":0" })
    58  
    59  	serverErr := th.Server.Start()
    60  	if serverErr != nil {
    61  		panic(serverErr)
    62  	}
    63  
    64  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.ListenAddress = prevListenAddress })
    65  
    66  	th.App.DoAppMigrations()
    67  
    68  	th.App.Srv.Store.MarkSystemRanUnitTests()
    69  
    70  	th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.EnableOpenServer = true })
    71  
    72  	if enterprise {
    73  		th.App.SetLicense(model.NewTestLicense())
    74  	} else {
    75  		th.App.SetLicense(nil)
    76  	}
    77  
    78  	return th
    79  }
    80  
    81  func SetupEnterprise() *TestHelper {
    82  	return setupTestHelper(true)
    83  }
    84  
    85  func Setup() *TestHelper {
    86  	return setupTestHelper(false)
    87  }
    88  
    89  func (me *TestHelper) InitBasic() *TestHelper {
    90  	me.SystemAdminUser = me.CreateUser()
    91  	me.App.UpdateUserRoles(me.SystemAdminUser.Id, model.SYSTEM_USER_ROLE_ID+" "+model.SYSTEM_ADMIN_ROLE_ID, false)
    92  	me.SystemAdminUser, _ = me.App.GetUser(me.SystemAdminUser.Id)
    93  
    94  	me.BasicTeam = me.CreateTeam()
    95  	me.BasicUser = me.CreateUser()
    96  	me.LinkUserToTeam(me.BasicUser, me.BasicTeam)
    97  	me.BasicUser2 = me.CreateUser()
    98  	me.LinkUserToTeam(me.BasicUser2, me.BasicTeam)
    99  	me.BasicChannel = me.CreateChannel(me.BasicTeam)
   100  	me.BasicPost = me.CreatePost(me.BasicChannel)
   101  
   102  	return me
   103  }
   104  
   105  func (me *TestHelper) MakeEmail() string {
   106  	return "success_" + model.NewId() + "@simulator.amazonses.com"
   107  }
   108  
   109  func (me *TestHelper) CreateTeam() *model.Team {
   110  	id := model.NewId()
   111  	team := &model.Team{
   112  		DisplayName: "dn_" + id,
   113  		Name:        "name" + id,
   114  		Email:       "success+" + id + "@simulator.amazonses.com",
   115  		Type:        model.TEAM_OPEN,
   116  	}
   117  
   118  	utils.DisableDebugLogForTest()
   119  	var err *model.AppError
   120  	if team, err = me.App.CreateTeam(team); err != nil {
   121  		mlog.Error(err.Error())
   122  
   123  		time.Sleep(time.Second)
   124  		panic(err)
   125  	}
   126  	utils.EnableDebugLogForTest()
   127  	return team
   128  }
   129  
   130  func (me *TestHelper) CreateUser() *model.User {
   131  	id := model.NewId()
   132  
   133  	user := &model.User{
   134  		Email:         "success+" + id + "@simulator.amazonses.com",
   135  		Username:      "un_" + id,
   136  		Nickname:      "nn_" + id,
   137  		Password:      "Password1",
   138  		EmailVerified: true,
   139  	}
   140  
   141  	utils.DisableDebugLogForTest()
   142  	var err *model.AppError
   143  	if user, err = me.App.CreateUser(user); err != nil {
   144  		mlog.Error(err.Error())
   145  
   146  		time.Sleep(time.Second)
   147  		panic(err)
   148  	}
   149  	utils.EnableDebugLogForTest()
   150  	return user
   151  }
   152  
   153  func (me *TestHelper) CreateChannel(team *model.Team) *model.Channel {
   154  	return me.createChannel(team, model.CHANNEL_OPEN)
   155  }
   156  
   157  func (me *TestHelper) createChannel(team *model.Team, channelType string) *model.Channel {
   158  	id := model.NewId()
   159  
   160  	channel := &model.Channel{
   161  		DisplayName: "dn_" + id,
   162  		Name:        "name_" + id,
   163  		Type:        channelType,
   164  		TeamId:      team.Id,
   165  		CreatorId:   me.BasicUser.Id,
   166  	}
   167  
   168  	utils.DisableDebugLogForTest()
   169  	var err *model.AppError
   170  	if channel, err = me.App.CreateChannel(channel, true); err != nil {
   171  		mlog.Error(err.Error())
   172  
   173  		time.Sleep(time.Second)
   174  		panic(err)
   175  	}
   176  	utils.EnableDebugLogForTest()
   177  	return channel
   178  }
   179  
   180  func (me *TestHelper) CreateDmChannel(user *model.User) *model.Channel {
   181  	utils.DisableDebugLogForTest()
   182  	var err *model.AppError
   183  	var channel *model.Channel
   184  	if channel, err = me.App.GetOrCreateDirectChannel(me.BasicUser.Id, user.Id); err != nil {
   185  		mlog.Error(err.Error())
   186  
   187  		time.Sleep(time.Second)
   188  		panic(err)
   189  	}
   190  	utils.EnableDebugLogForTest()
   191  	return channel
   192  }
   193  
   194  func (me *TestHelper) CreatePost(channel *model.Channel) *model.Post {
   195  	id := model.NewId()
   196  
   197  	post := &model.Post{
   198  		UserId:    me.BasicUser.Id,
   199  		ChannelId: channel.Id,
   200  		Message:   "message_" + id,
   201  		CreateAt:  model.GetMillis() - 10000,
   202  	}
   203  
   204  	utils.DisableDebugLogForTest()
   205  	var err *model.AppError
   206  	if post, err = me.App.CreatePost(post, channel, false); err != nil {
   207  		mlog.Error(err.Error())
   208  
   209  		time.Sleep(time.Second)
   210  		panic(err)
   211  	}
   212  	utils.EnableDebugLogForTest()
   213  	return post
   214  }
   215  
   216  func (me *TestHelper) LinkUserToTeam(user *model.User, team *model.Team) {
   217  	utils.DisableDebugLogForTest()
   218  
   219  	err := me.App.JoinUserToTeam(team, user, "")
   220  	if err != nil {
   221  		mlog.Error(err.Error())
   222  
   223  		time.Sleep(time.Second)
   224  		panic(err)
   225  	}
   226  
   227  	utils.EnableDebugLogForTest()
   228  }
   229  
   230  func (me *TestHelper) AddUserToChannel(user *model.User, channel *model.Channel) *model.ChannelMember {
   231  	utils.DisableDebugLogForTest()
   232  
   233  	member, err := me.App.AddUserToChannel(user, channel)
   234  	if err != nil {
   235  		mlog.Error(err.Error())
   236  
   237  		time.Sleep(time.Second)
   238  		panic(err)
   239  	}
   240  
   241  	utils.EnableDebugLogForTest()
   242  
   243  	return member
   244  }
   245  
   246  func (me *TestHelper) TearDown() {
   247  	me.Server.Shutdown()
   248  	if err := recover(); err != nil {
   249  		panic(err)
   250  	}
   251  	if me.tempWorkspace != "" {
   252  		os.RemoveAll(me.tempWorkspace)
   253  	}
   254  }
   255  
   256  func (me *TestHelper) ResetRoleMigration() {
   257  	sqlSupplier := mainHelper.GetSqlSupplier()
   258  	if _, err := sqlSupplier.GetMaster().Exec("DELETE from Roles"); err != nil {
   259  		panic(err)
   260  	}
   261  
   262  	mainHelper.GetClusterInterface().SendClearRoleCacheMessage()
   263  
   264  	if _, err := sqlSupplier.GetMaster().Exec("DELETE from Systems where Name = :Name", map[string]interface{}{"Name": app.ADVANCED_PERMISSIONS_MIGRATION_KEY}); err != nil {
   265  		panic(err)
   266  	}
   267  }
   268  
   269  func (me *TestHelper) DeleteAllJobsByTypeAndMigrationKey(jobType string, migrationKey string) {
   270  	jobs, err := me.App.Srv.Store.Job().GetAllByType(model.JOB_TYPE_MIGRATIONS)
   271  	if err != nil {
   272  		panic(err)
   273  	}
   274  
   275  	for _, job := range jobs {
   276  		if key, ok := job.Data[JOB_DATA_KEY_MIGRATION]; ok && key == migrationKey {
   277  			if _, err = me.App.Srv.Store.Job().Delete(job.Id); err != nil {
   278  				panic(err)
   279  			}
   280  		}
   281  	}
   282  }