github.com/kongr45gpen/mattermost-server@v5.11.1+incompatible/api4/apitestlib.go (about) 1 // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package api4 5 6 import ( 7 "fmt" 8 "io/ioutil" 9 "net" 10 "net/http" 11 "os" 12 "path/filepath" 13 "reflect" 14 "strconv" 15 "strings" 16 "testing" 17 "time" 18 19 "github.com/mattermost/mattermost-server/app" 20 "github.com/mattermost/mattermost-server/config" 21 "github.com/mattermost/mattermost-server/mlog" 22 "github.com/mattermost/mattermost-server/model" 23 "github.com/mattermost/mattermost-server/store" 24 "github.com/mattermost/mattermost-server/utils" 25 "github.com/mattermost/mattermost-server/web" 26 "github.com/mattermost/mattermost-server/wsapi" 27 28 s3 "github.com/minio/minio-go" 29 "github.com/minio/minio-go/pkg/credentials" 30 ) 31 32 type TestHelper struct { 33 App *app.App 34 Server *app.Server 35 ConfigStore config.Store 36 37 Client *model.Client4 38 BasicUser *model.User 39 BasicUser2 *model.User 40 TeamAdminUser *model.User 41 BasicTeam *model.Team 42 BasicChannel *model.Channel 43 BasicPrivateChannel *model.Channel 44 BasicDeletedChannel *model.Channel 45 BasicChannel2 *model.Channel 46 BasicPost *model.Post 47 48 SystemAdminClient *model.Client4 49 SystemAdminUser *model.User 50 tempWorkspace string 51 } 52 53 // testStore tracks the active test store. 54 // This is a bridge between the new testlib ownership of the test store and the existing usage 55 // of the api4 test helper by many packages. In the future, this test helper would ideally belong 56 // to the testlib altogether. 57 var testStore store.Store 58 59 func UseTestStore(store store.Store) { 60 testStore = store 61 } 62 63 func setupTestHelper(enterprise bool, updateConfig func(*model.Config)) *TestHelper { 64 testStore.DropAllTables() 65 66 memoryStore, err := config.NewMemoryStore() 67 if err != nil { 68 panic("failed to initialize memory store: " + err.Error()) 69 } 70 71 var options []app.Option 72 options = append(options, app.ConfigStore(memoryStore)) 73 options = append(options, app.StoreOverride(testStore)) 74 75 s, err := app.NewServer(options...) 76 if err != nil { 77 panic(err) 78 } 79 80 th := &TestHelper{ 81 App: s.FakeApp(), 82 Server: s, 83 ConfigStore: memoryStore, 84 } 85 86 th.App.UpdateConfig(func(cfg *model.Config) { 87 *cfg.TeamSettings.MaxUsersPerTeam = 50 88 *cfg.RateLimitSettings.Enable = false 89 *cfg.EmailSettings.SendEmailNotifications = true 90 }) 91 prevListenAddress := *th.App.Config().ServiceSettings.ListenAddress 92 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.ListenAddress = ":0" }) 93 if updateConfig != nil { 94 th.App.UpdateConfig(updateConfig) 95 } 96 serverErr := th.Server.Start() 97 if serverErr != nil { 98 panic(serverErr) 99 } 100 101 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.ListenAddress = prevListenAddress }) 102 Init(th.Server, th.Server.AppOptions, th.App.Srv.Router) 103 web.New(th.Server, th.Server.AppOptions, th.App.Srv.Router) 104 wsapi.Init(th.App, th.App.Srv.WebSocketRouter) 105 th.App.Srv.Store.MarkSystemRanUnitTests() 106 th.App.DoAdvancedPermissionsMigration() 107 th.App.DoEmojisPermissionsMigration() 108 109 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.EnableOpenServer = true }) 110 111 if enterprise { 112 th.App.SetLicense(model.NewTestLicense()) 113 } else { 114 th.App.SetLicense(nil) 115 } 116 117 th.Client = th.CreateClient() 118 th.SystemAdminClient = th.CreateClient() 119 120 if th.tempWorkspace == "" { 121 dir, err := ioutil.TempDir("", "apptest") 122 if err != nil { 123 panic(err) 124 } 125 th.tempWorkspace = dir 126 } 127 128 pluginDir := filepath.Join(th.tempWorkspace, "plugins") 129 webappDir := filepath.Join(th.tempWorkspace, "webapp") 130 131 th.App.UpdateConfig(func(cfg *model.Config) { 132 *cfg.PluginSettings.Directory = pluginDir 133 *cfg.PluginSettings.ClientDirectory = webappDir 134 }) 135 136 th.App.InitPlugins(pluginDir, webappDir) 137 138 return th 139 } 140 141 func SetupEnterprise() *TestHelper { 142 return setupTestHelper(true, nil) 143 } 144 145 func Setup() *TestHelper { 146 return setupTestHelper(false, nil) 147 } 148 149 func SetupConfig(updateConfig func(cfg *model.Config)) *TestHelper { 150 return setupTestHelper(false, updateConfig) 151 } 152 153 func (me *TestHelper) ShutdownApp() { 154 done := make(chan bool) 155 go func() { 156 me.Server.Shutdown() 157 close(done) 158 }() 159 160 select { 161 case <-done: 162 case <-time.After(30 * time.Second): 163 // panic instead of t.Fatal to terminate all tests in this package, otherwise the 164 // still running App could spuriously fail subsequent tests. 165 panic("failed to shutdown App within 30 seconds") 166 } 167 } 168 169 func (me *TestHelper) TearDown() { 170 utils.DisableDebugLogForTest() 171 172 me.ShutdownApp() 173 174 utils.EnableDebugLogForTest() 175 176 if err := recover(); err != nil { 177 panic(err) 178 } 179 } 180 181 func (me *TestHelper) InitBasic() *TestHelper { 182 me.waitForConnectivity() 183 184 me.SystemAdminUser = me.CreateUser() 185 me.App.UpdateUserRoles(me.SystemAdminUser.Id, model.SYSTEM_USER_ROLE_ID+" "+model.SYSTEM_ADMIN_ROLE_ID, false) 186 me.LoginSystemAdmin() 187 188 me.TeamAdminUser = me.CreateUser() 189 me.App.UpdateUserRoles(me.TeamAdminUser.Id, model.SYSTEM_USER_ROLE_ID, false) 190 me.LoginTeamAdmin() 191 192 me.BasicTeam = me.CreateTeam() 193 me.BasicChannel = me.CreatePublicChannel() 194 me.BasicPrivateChannel = me.CreatePrivateChannel() 195 me.BasicDeletedChannel = me.CreatePublicChannel() 196 me.BasicChannel2 = me.CreatePublicChannel() 197 me.BasicPost = me.CreatePost() 198 me.BasicUser = me.CreateUser() 199 me.LinkUserToTeam(me.BasicUser, me.BasicTeam) 200 me.BasicUser2 = me.CreateUser() 201 me.LinkUserToTeam(me.BasicUser2, me.BasicTeam) 202 me.App.AddUserToChannel(me.BasicUser, me.BasicChannel) 203 me.App.AddUserToChannel(me.BasicUser2, me.BasicChannel) 204 me.App.AddUserToChannel(me.BasicUser, me.BasicChannel2) 205 me.App.AddUserToChannel(me.BasicUser2, me.BasicChannel2) 206 me.App.AddUserToChannel(me.BasicUser, me.BasicPrivateChannel) 207 me.App.AddUserToChannel(me.BasicUser2, me.BasicPrivateChannel) 208 me.App.AddUserToChannel(me.BasicUser, me.BasicDeletedChannel) 209 me.App.AddUserToChannel(me.BasicUser2, me.BasicDeletedChannel) 210 me.App.UpdateUserRoles(me.BasicUser.Id, model.SYSTEM_USER_ROLE_ID, false) 211 me.Client.DeleteChannel(me.BasicDeletedChannel.Id) 212 me.LoginBasic() 213 214 return me 215 } 216 217 func (me *TestHelper) waitForConnectivity() { 218 for i := 0; i < 1000; i++ { 219 conn, err := net.Dial("tcp", fmt.Sprintf("localhost:%v", me.App.Srv.ListenAddr.Port)) 220 if err == nil { 221 conn.Close() 222 return 223 } 224 time.Sleep(time.Millisecond * 20) 225 } 226 panic("unable to connect") 227 } 228 229 func (me *TestHelper) CreateClient() *model.Client4 { 230 return model.NewAPIv4Client(fmt.Sprintf("http://localhost:%v", me.App.Srv.ListenAddr.Port)) 231 } 232 233 func (me *TestHelper) CreateWebSocketClient() (*model.WebSocketClient, *model.AppError) { 234 return model.NewWebSocketClient4(fmt.Sprintf("ws://localhost:%v", me.App.Srv.ListenAddr.Port), me.Client.AuthToken) 235 } 236 237 func (me *TestHelper) CreateWebSocketSystemAdminClient() (*model.WebSocketClient, *model.AppError) { 238 return model.NewWebSocketClient4(fmt.Sprintf("ws://localhost:%v", me.App.Srv.ListenAddr.Port), me.SystemAdminClient.AuthToken) 239 } 240 241 func (me *TestHelper) CreateUser() *model.User { 242 return me.CreateUserWithClient(me.Client) 243 } 244 245 func (me *TestHelper) CreateTeam() *model.Team { 246 return me.CreateTeamWithClient(me.Client) 247 } 248 249 func (me *TestHelper) CreateTeamWithClient(client *model.Client4) *model.Team { 250 id := model.NewId() 251 team := &model.Team{ 252 DisplayName: "dn_" + id, 253 Name: GenerateTestTeamName(), 254 Email: me.GenerateTestEmail(), 255 Type: model.TEAM_OPEN, 256 } 257 258 utils.DisableDebugLogForTest() 259 rteam, resp := client.CreateTeam(team) 260 if resp.Error != nil { 261 panic(resp.Error) 262 } 263 utils.EnableDebugLogForTest() 264 return rteam 265 } 266 267 func (me *TestHelper) CreateUserWithClient(client *model.Client4) *model.User { 268 id := model.NewId() 269 270 user := &model.User{ 271 Email: me.GenerateTestEmail(), 272 Username: GenerateTestUsername(), 273 Nickname: "nn_" + id, 274 FirstName: "f_" + id, 275 LastName: "l_" + id, 276 Password: "Password1", 277 } 278 279 utils.DisableDebugLogForTest() 280 ruser, response := client.CreateUser(user) 281 if response.Error != nil { 282 panic(response.Error) 283 } 284 285 ruser.Password = "Password1" 286 store.Must(me.App.Srv.Store.User().VerifyEmail(ruser.Id, ruser.Email)) 287 utils.EnableDebugLogForTest() 288 return ruser 289 } 290 291 func (me *TestHelper) CreatePublicChannel() *model.Channel { 292 return me.CreateChannelWithClient(me.Client, model.CHANNEL_OPEN) 293 } 294 295 func (me *TestHelper) CreatePrivateChannel() *model.Channel { 296 return me.CreateChannelWithClient(me.Client, model.CHANNEL_PRIVATE) 297 } 298 299 func (me *TestHelper) CreateChannelWithClient(client *model.Client4, channelType string) *model.Channel { 300 return me.CreateChannelWithClientAndTeam(client, channelType, me.BasicTeam.Id) 301 } 302 303 func (me *TestHelper) CreateChannelWithClientAndTeam(client *model.Client4, channelType string, teamId string) *model.Channel { 304 id := model.NewId() 305 306 channel := &model.Channel{ 307 DisplayName: "dn_" + id, 308 Name: GenerateTestChannelName(), 309 Type: channelType, 310 TeamId: teamId, 311 } 312 313 utils.DisableDebugLogForTest() 314 rchannel, resp := client.CreateChannel(channel) 315 if resp.Error != nil { 316 panic(resp.Error) 317 } 318 utils.EnableDebugLogForTest() 319 return rchannel 320 } 321 322 func (me *TestHelper) CreatePost() *model.Post { 323 return me.CreatePostWithClient(me.Client, me.BasicChannel) 324 } 325 326 func (me *TestHelper) CreatePinnedPost() *model.Post { 327 return me.CreatePinnedPostWithClient(me.Client, me.BasicChannel) 328 } 329 330 func (me *TestHelper) CreateMessagePost(message string) *model.Post { 331 return me.CreateMessagePostWithClient(me.Client, me.BasicChannel, message) 332 } 333 334 func (me *TestHelper) CreatePostWithClient(client *model.Client4, channel *model.Channel) *model.Post { 335 id := model.NewId() 336 337 post := &model.Post{ 338 ChannelId: channel.Id, 339 Message: "message_" + id, 340 } 341 342 utils.DisableDebugLogForTest() 343 rpost, resp := client.CreatePost(post) 344 if resp.Error != nil { 345 panic(resp.Error) 346 } 347 utils.EnableDebugLogForTest() 348 return rpost 349 } 350 351 func (me *TestHelper) CreatePinnedPostWithClient(client *model.Client4, channel *model.Channel) *model.Post { 352 id := model.NewId() 353 354 post := &model.Post{ 355 ChannelId: channel.Id, 356 Message: "message_" + id, 357 IsPinned: true, 358 } 359 360 utils.DisableDebugLogForTest() 361 rpost, resp := client.CreatePost(post) 362 if resp.Error != nil { 363 panic(resp.Error) 364 } 365 utils.EnableDebugLogForTest() 366 return rpost 367 } 368 369 func (me *TestHelper) CreateMessagePostWithClient(client *model.Client4, channel *model.Channel, message string) *model.Post { 370 post := &model.Post{ 371 ChannelId: channel.Id, 372 Message: message, 373 } 374 375 utils.DisableDebugLogForTest() 376 rpost, resp := client.CreatePost(post) 377 if resp.Error != nil { 378 panic(resp.Error) 379 } 380 utils.EnableDebugLogForTest() 381 return rpost 382 } 383 384 func (me *TestHelper) CreateMessagePostNoClient(channel *model.Channel, message string, createAtTime int64) *model.Post { 385 post := store.Must(me.App.Srv.Store.Post().Save(&model.Post{ 386 UserId: me.BasicUser.Id, 387 ChannelId: channel.Id, 388 Message: message, 389 CreateAt: createAtTime, 390 })).(*model.Post) 391 392 return post 393 } 394 395 func (me *TestHelper) CreateDmChannel(user *model.User) *model.Channel { 396 utils.DisableDebugLogForTest() 397 var err *model.AppError 398 var channel *model.Channel 399 if channel, err = me.App.GetOrCreateDirectChannel(me.BasicUser.Id, user.Id); err != nil { 400 mlog.Error(err.Error()) 401 402 time.Sleep(time.Second) 403 panic(err) 404 } 405 utils.EnableDebugLogForTest() 406 return channel 407 } 408 409 func (me *TestHelper) LoginBasic() { 410 me.LoginBasicWithClient(me.Client) 411 } 412 413 func (me *TestHelper) LoginBasic2() { 414 me.LoginBasic2WithClient(me.Client) 415 } 416 417 func (me *TestHelper) LoginTeamAdmin() { 418 me.LoginTeamAdminWithClient(me.Client) 419 } 420 421 func (me *TestHelper) LoginSystemAdmin() { 422 me.LoginSystemAdminWithClient(me.SystemAdminClient) 423 } 424 425 func (me *TestHelper) LoginBasicWithClient(client *model.Client4) { 426 utils.DisableDebugLogForTest() 427 _, resp := client.Login(me.BasicUser.Email, me.BasicUser.Password) 428 if resp.Error != nil { 429 panic(resp.Error) 430 } 431 utils.EnableDebugLogForTest() 432 } 433 434 func (me *TestHelper) LoginBasic2WithClient(client *model.Client4) { 435 utils.DisableDebugLogForTest() 436 _, resp := client.Login(me.BasicUser2.Email, me.BasicUser2.Password) 437 if resp.Error != nil { 438 panic(resp.Error) 439 } 440 utils.EnableDebugLogForTest() 441 } 442 443 func (me *TestHelper) LoginTeamAdminWithClient(client *model.Client4) { 444 utils.DisableDebugLogForTest() 445 _, resp := client.Login(me.TeamAdminUser.Email, me.TeamAdminUser.Password) 446 if resp.Error != nil { 447 panic(resp.Error) 448 } 449 utils.EnableDebugLogForTest() 450 } 451 452 func (me *TestHelper) LoginSystemAdminWithClient(client *model.Client4) { 453 utils.DisableDebugLogForTest() 454 _, resp := client.Login(me.SystemAdminUser.Email, me.SystemAdminUser.Password) 455 if resp.Error != nil { 456 panic(resp.Error) 457 } 458 utils.EnableDebugLogForTest() 459 } 460 461 func (me *TestHelper) UpdateActiveUser(user *model.User, active bool) { 462 utils.DisableDebugLogForTest() 463 464 _, err := me.App.UpdateActive(user, active) 465 if err != nil { 466 mlog.Error(err.Error()) 467 468 time.Sleep(time.Second) 469 panic(err) 470 } 471 472 utils.EnableDebugLogForTest() 473 } 474 475 func (me *TestHelper) LinkUserToTeam(user *model.User, team *model.Team) { 476 utils.DisableDebugLogForTest() 477 478 err := me.App.JoinUserToTeam(team, user, "") 479 if err != nil { 480 mlog.Error(err.Error()) 481 482 time.Sleep(time.Second) 483 panic(err) 484 } 485 486 utils.EnableDebugLogForTest() 487 } 488 489 func (me *TestHelper) AddUserToChannel(user *model.User, channel *model.Channel) *model.ChannelMember { 490 utils.DisableDebugLogForTest() 491 492 member, err := me.App.AddUserToChannel(user, channel) 493 if err != nil { 494 mlog.Error(err.Error()) 495 496 time.Sleep(time.Second) 497 panic(err) 498 } 499 500 utils.EnableDebugLogForTest() 501 502 return member 503 } 504 505 func (me *TestHelper) GenerateTestEmail() string { 506 if *me.App.Config().EmailSettings.SMTPServer != "dockerhost" && os.Getenv("CI_INBUCKET_PORT") == "" { 507 return strings.ToLower("success+" + model.NewId() + "@simulator.amazonses.com") 508 } 509 return strings.ToLower(model.NewId() + "@dockerhost") 510 } 511 512 func GenerateTestUsername() string { 513 return "fakeuser" + model.NewRandomString(10) 514 } 515 516 func GenerateTestTeamName() string { 517 return "faketeam" + model.NewRandomString(6) 518 } 519 520 func GenerateTestChannelName() string { 521 return "fakechannel" + model.NewRandomString(10) 522 } 523 524 func GenerateTestAppName() string { 525 return "fakeoauthapp" + model.NewRandomString(10) 526 } 527 528 func GenerateTestId() string { 529 return model.NewId() 530 } 531 532 func CheckUserSanitization(t *testing.T, user *model.User) { 533 t.Helper() 534 535 if user.Password != "" { 536 t.Fatal("password wasn't blank") 537 } 538 539 if user.AuthData != nil && *user.AuthData != "" { 540 t.Fatal("auth data wasn't blank") 541 } 542 543 if user.MfaSecret != "" { 544 t.Fatal("mfa secret wasn't blank") 545 } 546 } 547 548 func CheckEtag(t *testing.T, data interface{}, resp *model.Response) { 549 t.Helper() 550 551 if !reflect.ValueOf(data).IsNil() { 552 t.Fatal("etag data was not nil") 553 } 554 555 if resp.StatusCode != http.StatusNotModified { 556 t.Log("actual: " + strconv.Itoa(resp.StatusCode)) 557 t.Log("expected: " + strconv.Itoa(http.StatusNotModified)) 558 t.Fatal("wrong status code for etag") 559 } 560 } 561 562 func CheckNoError(t *testing.T, resp *model.Response) { 563 t.Helper() 564 565 if resp.Error != nil { 566 t.Fatalf("Expected no error, got %q", resp.Error.Error()) 567 } 568 } 569 570 func checkHTTPStatus(t *testing.T, resp *model.Response, expectedStatus int, expectError bool) { 571 t.Helper() 572 573 switch { 574 case resp == nil: 575 t.Fatalf("Unexpected nil response, expected http:%v, expectError:%v)", expectedStatus, expectError) 576 577 case expectError && resp.Error == nil: 578 t.Fatalf("Expected a non-nil error and http status:%v, got nil, %v", expectedStatus, resp.StatusCode) 579 580 case !expectError && resp.Error != nil: 581 t.Fatalf("Expected no error and http status:%v, got %q, http:%v", expectedStatus, resp.Error, resp.StatusCode) 582 583 case resp.StatusCode != expectedStatus: 584 t.Fatalf("Expected http status:%v, got %v (err: %q)", expectedStatus, resp.StatusCode, resp.Error) 585 } 586 } 587 588 func CheckOKStatus(t *testing.T, resp *model.Response) { 589 t.Helper() 590 checkHTTPStatus(t, resp, http.StatusOK, false) 591 } 592 593 func CheckCreatedStatus(t *testing.T, resp *model.Response) { 594 t.Helper() 595 checkHTTPStatus(t, resp, http.StatusCreated, false) 596 } 597 598 func CheckForbiddenStatus(t *testing.T, resp *model.Response) { 599 t.Helper() 600 checkHTTPStatus(t, resp, http.StatusForbidden, true) 601 } 602 603 func CheckUnauthorizedStatus(t *testing.T, resp *model.Response) { 604 t.Helper() 605 checkHTTPStatus(t, resp, http.StatusUnauthorized, true) 606 } 607 608 func CheckNotFoundStatus(t *testing.T, resp *model.Response) { 609 t.Helper() 610 checkHTTPStatus(t, resp, http.StatusNotFound, true) 611 } 612 613 func CheckBadRequestStatus(t *testing.T, resp *model.Response) { 614 t.Helper() 615 checkHTTPStatus(t, resp, http.StatusBadRequest, true) 616 } 617 618 func CheckNotImplementedStatus(t *testing.T, resp *model.Response) { 619 t.Helper() 620 checkHTTPStatus(t, resp, http.StatusNotImplemented, true) 621 } 622 623 func CheckRequestEntityTooLargeStatus(t *testing.T, resp *model.Response) { 624 t.Helper() 625 checkHTTPStatus(t, resp, http.StatusRequestEntityTooLarge, true) 626 } 627 628 func CheckInternalErrorStatus(t *testing.T, resp *model.Response) { 629 t.Helper() 630 checkHTTPStatus(t, resp, http.StatusInternalServerError, true) 631 } 632 633 func CheckErrorMessage(t *testing.T, resp *model.Response, errorId string) { 634 t.Helper() 635 636 if resp.Error == nil { 637 t.Fatal("should have errored with message:" + errorId) 638 return 639 } 640 641 if resp.Error.Id != errorId { 642 t.Log("actual: " + resp.Error.Id) 643 t.Log("expected: " + errorId) 644 t.Fatal("incorrect error message") 645 } 646 } 647 648 // Similar to s3.New() but allows initialization of signature v2 or signature v4 client. 649 // If signV2 input is false, function always returns signature v4. 650 // 651 // Additionally this function also takes a user defined region, if set 652 // disables automatic region lookup. 653 func s3New(endpoint, accessKey, secretKey string, secure bool, signV2 bool, region string) (*s3.Client, error) { 654 var creds *credentials.Credentials 655 if signV2 { 656 creds = credentials.NewStatic(accessKey, secretKey, "", credentials.SignatureV2) 657 } else { 658 creds = credentials.NewStatic(accessKey, secretKey, "", credentials.SignatureV4) 659 } 660 return s3.NewWithCredentials(endpoint, creds, secure, region) 661 } 662 663 func (me *TestHelper) cleanupTestFile(info *model.FileInfo) error { 664 cfg := me.App.Config() 665 if *cfg.FileSettings.DriverName == model.IMAGE_DRIVER_S3 { 666 endpoint := *cfg.FileSettings.AmazonS3Endpoint 667 accessKey := *cfg.FileSettings.AmazonS3AccessKeyId 668 secretKey := *cfg.FileSettings.AmazonS3SecretAccessKey 669 secure := *cfg.FileSettings.AmazonS3SSL 670 signV2 := *cfg.FileSettings.AmazonS3SignV2 671 region := *cfg.FileSettings.AmazonS3Region 672 s3Clnt, err := s3New(endpoint, accessKey, secretKey, secure, signV2, region) 673 if err != nil { 674 return err 675 } 676 bucket := *cfg.FileSettings.AmazonS3Bucket 677 if err := s3Clnt.RemoveObject(bucket, info.Path); err != nil { 678 return err 679 } 680 681 if info.ThumbnailPath != "" { 682 if err := s3Clnt.RemoveObject(bucket, info.ThumbnailPath); err != nil { 683 return err 684 } 685 } 686 687 if info.PreviewPath != "" { 688 if err := s3Clnt.RemoveObject(bucket, info.PreviewPath); err != nil { 689 return err 690 } 691 } 692 } else if *cfg.FileSettings.DriverName == model.IMAGE_DRIVER_LOCAL { 693 if err := os.Remove(*cfg.FileSettings.Directory + info.Path); err != nil { 694 return err 695 } 696 697 if info.ThumbnailPath != "" { 698 if err := os.Remove(*cfg.FileSettings.Directory + info.ThumbnailPath); err != nil { 699 return err 700 } 701 } 702 703 if info.PreviewPath != "" { 704 if err := os.Remove(*cfg.FileSettings.Directory + info.PreviewPath); err != nil { 705 return err 706 } 707 } 708 } 709 710 return nil 711 } 712 713 func (me *TestHelper) MakeUserChannelAdmin(user *model.User, channel *model.Channel) { 714 utils.DisableDebugLogForTest() 715 716 if cmr := <-me.App.Srv.Store.Channel().GetMember(channel.Id, user.Id); cmr.Err == nil { 717 cm := cmr.Data.(*model.ChannelMember) 718 cm.SchemeAdmin = true 719 if sr := <-me.App.Srv.Store.Channel().UpdateMember(cm); sr.Err != nil { 720 utils.EnableDebugLogForTest() 721 panic(sr.Err) 722 } 723 } else { 724 utils.EnableDebugLogForTest() 725 panic(cmr.Err) 726 } 727 728 utils.EnableDebugLogForTest() 729 } 730 731 func (me *TestHelper) UpdateUserToTeamAdmin(user *model.User, team *model.Team) { 732 utils.DisableDebugLogForTest() 733 734 if tmr := <-me.App.Srv.Store.Team().GetMember(team.Id, user.Id); tmr.Err == nil { 735 tm := tmr.Data.(*model.TeamMember) 736 tm.SchemeAdmin = true 737 if sr := <-me.App.Srv.Store.Team().UpdateMember(tm); sr.Err != nil { 738 utils.EnableDebugLogForTest() 739 panic(sr.Err) 740 } 741 } else { 742 utils.EnableDebugLogForTest() 743 mlog.Error(tmr.Err.Error()) 744 745 time.Sleep(time.Second) 746 panic(tmr.Err) 747 } 748 749 utils.EnableDebugLogForTest() 750 } 751 752 func (me *TestHelper) UpdateUserToNonTeamAdmin(user *model.User, team *model.Team) { 753 utils.DisableDebugLogForTest() 754 755 if tmr := <-me.App.Srv.Store.Team().GetMember(team.Id, user.Id); tmr.Err == nil { 756 tm := tmr.Data.(*model.TeamMember) 757 tm.SchemeAdmin = false 758 if sr := <-me.App.Srv.Store.Team().UpdateMember(tm); sr.Err != nil { 759 utils.EnableDebugLogForTest() 760 panic(sr.Err) 761 } 762 } else { 763 utils.EnableDebugLogForTest() 764 mlog.Error(tmr.Err.Error()) 765 766 time.Sleep(time.Second) 767 panic(tmr.Err) 768 } 769 770 utils.EnableDebugLogForTest() 771 } 772 773 func (me *TestHelper) SaveDefaultRolePermissions() map[string][]string { 774 utils.DisableDebugLogForTest() 775 776 results := make(map[string][]string) 777 778 for _, roleName := range []string{ 779 "system_user", 780 "system_admin", 781 "team_user", 782 "team_admin", 783 "channel_user", 784 "channel_admin", 785 } { 786 role, err1 := me.App.GetRoleByName(roleName) 787 if err1 != nil { 788 utils.EnableDebugLogForTest() 789 panic(err1) 790 } 791 792 results[roleName] = role.Permissions 793 } 794 795 utils.EnableDebugLogForTest() 796 return results 797 } 798 799 func (me *TestHelper) RestoreDefaultRolePermissions(data map[string][]string) { 800 utils.DisableDebugLogForTest() 801 802 for roleName, permissions := range data { 803 role, err1 := me.App.GetRoleByName(roleName) 804 if err1 != nil { 805 utils.EnableDebugLogForTest() 806 panic(err1) 807 } 808 809 if strings.Join(role.Permissions, " ") == strings.Join(permissions, " ") { 810 continue 811 } 812 813 role.Permissions = permissions 814 815 _, err2 := me.App.UpdateRole(role) 816 if err2 != nil { 817 utils.EnableDebugLogForTest() 818 panic(err2) 819 } 820 } 821 822 utils.EnableDebugLogForTest() 823 } 824 825 func (me *TestHelper) RemovePermissionFromRole(permission string, roleName string) { 826 utils.DisableDebugLogForTest() 827 828 role, err1 := me.App.GetRoleByName(roleName) 829 if err1 != nil { 830 utils.EnableDebugLogForTest() 831 panic(err1) 832 } 833 834 var newPermissions []string 835 for _, p := range role.Permissions { 836 if p != permission { 837 newPermissions = append(newPermissions, p) 838 } 839 } 840 841 if strings.Join(role.Permissions, " ") == strings.Join(newPermissions, " ") { 842 utils.EnableDebugLogForTest() 843 return 844 } 845 846 role.Permissions = newPermissions 847 848 _, err2 := me.App.UpdateRole(role) 849 if err2 != nil { 850 utils.EnableDebugLogForTest() 851 panic(err2) 852 } 853 854 utils.EnableDebugLogForTest() 855 } 856 857 func (me *TestHelper) AddPermissionToRole(permission string, roleName string) { 858 utils.DisableDebugLogForTest() 859 860 role, err1 := me.App.GetRoleByName(roleName) 861 if err1 != nil { 862 utils.EnableDebugLogForTest() 863 panic(err1) 864 } 865 866 for _, existingPermission := range role.Permissions { 867 if existingPermission == permission { 868 utils.EnableDebugLogForTest() 869 return 870 } 871 } 872 873 role.Permissions = append(role.Permissions, permission) 874 875 _, err2 := me.App.UpdateRole(role) 876 if err2 != nil { 877 utils.EnableDebugLogForTest() 878 panic(err2) 879 } 880 881 utils.EnableDebugLogForTest() 882 }