diff options
| author | 2022-05-23 17:40:03 +0200 | |
|---|---|---|
| committer | 2022-05-23 16:40:03 +0100 | |
| commit | f0c9f4169be6c5c7dd913f348cdd294a19038d63 (patch) | |
| tree | 7d06da6edc0ed92c78b79938a20c7e82f784fac4 /internal/federation/federatingdb | |
| parent | [docs] document a checklist for how to go about a release (#592) (diff) | |
| download | gotosocial-f0c9f4169be6c5c7dd913f348cdd294a19038d63.tar.xz | |
[bugfix] Fix multiple dereferences of boosted status causing media duplication (#589)
* add some announces to test models
* start on announce test logic
* test federatingDB.Announce
* change signature of GetRemoteStatus
* remove 'refresh' logic and replace it with refetch
* go fmt
* remove timeline manager from processor test
* make zork created at determinate
* test get account statuses
* test get + serialize zork
* make account keys determinate
* make admin accountCreate time determinate
* test account to as
* init test config before test log
* test status to frontend
* remove daft Within check
* hack around a bit
* use index of slice
Diffstat (limited to 'internal/federation/federatingdb')
| -rw-r--r-- | internal/federation/federatingdb/announce_test.go | 93 | ||||
| -rw-r--r-- | internal/federation/federatingdb/federatingdb_test.go | 3 | 
2 files changed, 95 insertions, 1 deletions
diff --git a/internal/federation/federatingdb/announce_test.go b/internal/federation/federatingdb/announce_test.go new file mode 100644 index 000000000..f63910298 --- /dev/null +++ b/internal/federation/federatingdb/announce_test.go @@ -0,0 +1,93 @@ +/* +   GoToSocial +   Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU Affero General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Affero General Public License for more details. + +   You should have received a copy of the GNU Affero General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +package federatingdb_test + +import ( +	"testing" + +	"github.com/stretchr/testify/suite" +	"github.com/superseriousbusiness/activity/streams/vocab" +	"github.com/superseriousbusiness/gotosocial/internal/ap" +	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel" +) + +type AnnounceTestSuite struct { +	FederatingDBTestSuite +} + +func (suite *AnnounceTestSuite) TestNewAnnounce() { +	receivingAccount1 := suite.testAccounts["local_account_1"] +	announcingAccount := suite.testAccounts["remote_account_1"] + +	ctx := createTestContext(receivingAccount1, announcingAccount) +	announce1 := suite.testActivities["announce_forwarded_1_zork"] + +	err := suite.federatingDB.Announce(ctx, announce1.Activity.(vocab.ActivityStreamsAnnounce)) +	suite.NoError(err) + +	// should be a message heading to the processor now, which we can intercept here +	msg := <-suite.fromFederator +	suite.Equal(ap.ActivityAnnounce, msg.APObjectType) +	suite.Equal(ap.ActivityCreate, msg.APActivityType) + +	boost, ok := msg.GTSModel.(*gtsmodel.Status) +	suite.True(ok) +	suite.Equal(announcingAccount.ID, boost.AccountID) + +	// only the URI will be set on the boosted status because it still needs to be dereferenced +	suite.NotEmpty(boost.BoostOf.URI) +} + +func (suite *AnnounceTestSuite) TestAnnounceTwice() { +	receivingAccount1 := suite.testAccounts["local_account_1"] +	receivingAccount2 := suite.testAccounts["local_account_2"] + +	announcingAccount := suite.testAccounts["remote_account_1"] + +	ctx1 := createTestContext(receivingAccount1, announcingAccount) +	announce1 := suite.testActivities["announce_forwarded_1_zork"] + +	err := suite.federatingDB.Announce(ctx1, announce1.Activity.(vocab.ActivityStreamsAnnounce)) +	suite.NoError(err) + +	// should be a message heading to the processor now, which we can intercept here +	msg := <-suite.fromFederator +	suite.Equal(ap.ActivityAnnounce, msg.APObjectType) +	suite.Equal(ap.ActivityCreate, msg.APActivityType) +	boost, ok := msg.GTSModel.(*gtsmodel.Status) +	suite.True(ok) +	suite.Equal(announcingAccount.ID, boost.AccountID) + +	// only the URI will be set on the boosted status because it still needs to be dereferenced +	suite.NotEmpty(boost.BoostOf.URI) + +	ctx2 := createTestContext(receivingAccount2, announcingAccount) +	announce2 := suite.testActivities["announce_forwarded_1_turtle"] + +	err = suite.federatingDB.Announce(ctx2, announce2.Activity.(vocab.ActivityStreamsAnnounce)) +	suite.NoError(err) + +	// since this is a repeat announce with the same URI, just delivered to a different inbox, +	// we should have nothing in the messages channel... +	suite.Empty(suite.fromFederator) +} + +func TestAnnounceTestSuite(t *testing.T) { +	suite.Run(t, &AnnounceTestSuite{}) +} diff --git a/internal/federation/federatingdb/federatingdb_test.go b/internal/federation/federatingdb/federatingdb_test.go index 8e6c1802d..ded817c98 100644 --- a/internal/federation/federatingdb/federatingdb_test.go +++ b/internal/federation/federatingdb/federatingdb_test.go @@ -63,8 +63,9 @@ func (suite *FederatingDBTestSuite) SetupSuite() {  }  func (suite *FederatingDBTestSuite) SetupTest() { -	testrig.InitTestLog()  	testrig.InitTestConfig() +	testrig.InitTestLog() +  	suite.fedWorker = concurrency.NewWorkerPool[messages.FromFederator](-1, -1)  	suite.fromFederator = make(chan messages.FromFederator, 10)  	suite.fedWorker.SetProcessor(func(ctx context.Context, msg messages.FromFederator) error {  | 
