github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/test/teams_test.go (about)

     1  // Copyright 2017 Keybase Inc. All rights reserved.
     2  // Use of this source code is governed by a BSD
     3  // license that can be found in the LICENSE file.
     4  
     5  package test
     6  
     7  import (
     8  	"testing"
     9  )
    10  
    11  func TestTeamsTwoWriters(t *testing.T) {
    12  	test(t,
    13  		users("alice", "bob"),
    14  		team("ab", "alice,bob", ""),
    15  		inSingleTeamTlf("ab"),
    16  		as(alice,
    17  			mkfile("a", "hello"),
    18  		),
    19  		as(bob,
    20  			read("a", "hello"),
    21  			mkfile("b", "world"),
    22  		),
    23  		as(alice,
    24  			read("b", "world"),
    25  		),
    26  	)
    27  }
    28  
    29  func TestTeamsTwoWritersNonCanonical(t *testing.T) {
    30  	test(t,
    31  		users("alice", "bob"),
    32  		team("ab", "alice,bob", ""),
    33  		inSingleTeamNonCanonical("AB", "ab"),
    34  		as(alice,
    35  			mkfile("a", "hello"),
    36  		),
    37  		as(bob,
    38  			read("a", "hello"),
    39  			mkfile("b", "world"),
    40  		),
    41  		as(alice,
    42  			read("b", "world"),
    43  		),
    44  	)
    45  }
    46  
    47  func TestTeamsWriterReader(t *testing.T) {
    48  	test(t,
    49  		users("alice", "bob"),
    50  		team("a_b", "alice", "bob"),
    51  		inSingleTeamTlf("a_b"),
    52  		as(alice,
    53  			mkfile("a", "hello"),
    54  		),
    55  		as(bob,
    56  			read("a", "hello"),
    57  			expectError(mkfile("b", "world"),
    58  				"bob does not have write access to directory /keybase/team/a_b"),
    59  		),
    60  	)
    61  }
    62  
    63  func TestTeamsTwoWritersJournal(t *testing.T) {
    64  	test(t, journal(),
    65  		users("alice", "bob"),
    66  		team("ab", "alice,bob", ""),
    67  		inSingleTeamTlf("ab"),
    68  		as(alice,
    69  			// The tests don't support enabling journaling on a
    70  			// non-existent TLF, so force the TLF creation first.
    71  			mkfile("foo", "bar"),
    72  			rm("foo"),
    73  		),
    74  		as(alice,
    75  			enableJournal(),
    76  			mkfile("a", "hello"),
    77  		),
    78  		as(alice,
    79  			// Wait for the flush, after doing a SyncAll().
    80  			flushJournal(),
    81  		),
    82  		as(bob,
    83  			enableJournal(),
    84  			read("a", "hello"),
    85  			mkfile("b", "world"),
    86  		),
    87  		as(bob,
    88  			// Wait for the flush, after doing a SyncAll().
    89  			flushJournal(),
    90  		),
    91  		as(alice,
    92  			read("b", "world"),
    93  		),
    94  	)
    95  }
    96  
    97  func TestTeamsNameChange(t *testing.T) {
    98  	test(t,
    99  		users("alice", "bob"),
   100  		team("ab", "alice,bob", ""),
   101  		inSingleTeamTlf("ab"),
   102  		as(alice,
   103  			mkfile("a", "hello"),
   104  		),
   105  		as(bob,
   106  			read("a", "hello"),
   107  			mkfile("b", "world"),
   108  		),
   109  		as(alice,
   110  			read("b", "world"),
   111  		),
   112  		changeTeamName("ab", "ba"),
   113  		inSingleTeamTlf("ba"),
   114  		as(alice,
   115  			read("a", "hello"),
   116  			read("b", "world"),
   117  		),
   118  		as(bob,
   119  			read("a", "hello"),
   120  			read("b", "world"),
   121  		),
   122  	)
   123  }
   124  
   125  func TestSubteamsTwoWriters(t *testing.T) {
   126  	test(t,
   127  		users("alice", "bob"),
   128  		team("al", "alice", ""),
   129  		team("al.ab", "alice,bob", ""),
   130  		inSingleTeamTlf("al.ab"),
   131  		as(alice,
   132  			mkfile("a", "hello"),
   133  		),
   134  		as(bob,
   135  			read("a", "hello"),
   136  			mkfile("b", "world"),
   137  		),
   138  		as(alice,
   139  			read("b", "world"),
   140  		),
   141  	)
   142  }
   143  
   144  func TestSubteamsTwoWritersJournal(t *testing.T) {
   145  	test(t, journal(),
   146  		users("alice", "bob"),
   147  		team("al", "alice", ""),
   148  		team("al.ab", "alice,bob", ""),
   149  		inSingleTeamTlf("al.ab"),
   150  		as(alice,
   151  			// The tests don't support enabling journaling on a
   152  			// non-existent TLF, so force the TLF creation first.
   153  			mkfile("foo", "bar"),
   154  			rm("foo"),
   155  		),
   156  		as(alice,
   157  			enableJournal(),
   158  			mkfile("a", "hello"),
   159  		),
   160  		as(alice,
   161  			// Wait for the flush, after doing a SyncAll().
   162  			flushJournal(),
   163  		),
   164  		as(bob,
   165  			enableJournal(),
   166  			read("a", "hello"),
   167  			mkfile("b", "world"),
   168  		),
   169  		as(bob,
   170  			// Wait for the flush, after doing a SyncAll().
   171  			flushJournal(),
   172  		),
   173  		as(alice,
   174  			read("b", "world"),
   175  		),
   176  	)
   177  }