@@ -15,6 +15,7 @@ import (
1515 sqlmanager_postgres "github.com/nucleuscloud/neosync/backend/pkg/sqlmanager/postgres"
1616 sqlmanager_shared "github.com/nucleuscloud/neosync/backend/pkg/sqlmanager/shared"
1717 "github.com/nucleuscloud/neosync/internal/gotypeutil"
18+ schemamanager_shared "github.com/nucleuscloud/neosync/internal/schema-manager/shared"
1819 tcpostgres "github.com/nucleuscloud/neosync/internal/testutil/testcontainers/postgres"
1920 tcredis "github.com/nucleuscloud/neosync/internal/testutil/testcontainers/redis"
2021 testutil_testdata "github.com/nucleuscloud/neosync/internal/testutil/testdata"
@@ -1525,30 +1526,7 @@ func verify_postgres_schemas(
15251526 require .NoError (t , err , "failed to get source columns" )
15261527 destColumns , err := destManager .GetColumnsByTables (ctx , schematables )
15271528 require .NoError (t , err , "failed to get destination columns" )
1528-
1529- srcColumnsMap := make (map [string ]* sqlmanager_shared.TableColumn )
1530- for _ , column := range srcColumns {
1531- key := fmt .Sprintf ("%s.%s.%s" , column .Schema , column .Table , column .Name )
1532- srcColumnsMap [key ] = column
1533- }
1534-
1535- destColumnsMap := make (map [string ]* sqlmanager_shared.TableColumn )
1536- for _ , column := range destColumns {
1537- key := fmt .Sprintf ("%s.%s.%s" , column .Schema , column .Table , column .Name )
1538- destColumnsMap [key ] = column
1539- }
1540-
1541- for _ , column := range srcColumns {
1542- srcKey := fmt .Sprintf ("%s.%s.%s" , column .Schema , column .Table , column .Name )
1543- destColumn , exists := destColumnsMap [srcKey ]
1544- require .True (t , exists , "source column %s not found in destination" , srcKey )
1545- verify_postgres_column_spec (t , column , destColumn )
1546- }
1547- for _ , column := range destColumns {
1548- destKey := fmt .Sprintf ("%s.%s.%s" , column .Schema , column .Table , column .Name )
1549- _ , exists := srcColumnsMap [destKey ]
1550- require .True (t , exists , "destination column %s not found in source" , destKey )
1551- }
1529+ assert_fingerprints_match_in_source_and_target (t , srcColumns , destColumns , "columns" )
15521530
15531531 t .Logf ("checking table constraints are the same in source and destination" )
15541532 srcConstraints , err := srcManager .GetTableConstraintsByTables (ctx , schema , tables )
@@ -1565,88 +1543,49 @@ func verify_postgres_schemas(
15651543 require .Equal (t , srcfk , destfk , "foreign key constraints do not match for table %s" , table )
15661544 require .Equal (t , srcNonFk , destNonFk , "non-foreign key constraints do not match for table %s" , table )
15671545
1568- for _ , fk := range srcfk {
1569- require .Contains (t , destfk , fk , "destination missing foreign key constraint in table %s" , table )
1570- }
1571- for _ , fk := range destfk {
1572- require .Contains (t , srcfk , fk , "source missing foreign key constraint in table %s" , table )
1573- }
1574-
1575- for _ , nonFk := range srcNonFk {
1576- require .Contains (t , destNonFk , nonFk , "destination missing non-foreign key constraint in table %s" , table )
1577- }
1578- for _ , nonFk := range destNonFk {
1579- require .Contains (t , srcNonFk , nonFk , "source missing non-foreign key constraint in table %s" , table )
1580- }
1546+ assert_fingerprints_match_in_source_and_target (t , srcfk , destfk , "foreign key constraints" )
1547+ assert_fingerprints_match_in_source_and_target (t , srcNonFk , destNonFk , "non-foreign key constraints" )
15811548 }
15821549
15831550 t .Logf ("checking triggers are the same in source and destination" )
15841551 srcTriggers , err := srcManager .GetSchemaTableTriggers (ctx , schematables )
15851552 require .NoError (t , err , "failed to get source triggers" )
15861553 destTriggers , err := destManager .GetSchemaTableTriggers (ctx , schematables )
15871554 require .NoError (t , err , "failed to get destination triggers" )
1588-
1589- destTriggersMap := make (map [string ]* sqlmanager_shared.TableTrigger )
1590- for _ , trigger := range destTriggers {
1591- destTriggersMap [trigger .Fingerprint ] = trigger
1592- }
1593- for _ , trigger := range srcTriggers {
1594- destTrigger , ok := destTriggersMap [trigger .Fingerprint ]
1595- require .True (t , ok , "destination missing trigger with fingerprint %s" , trigger .Fingerprint )
1596- require .Equal (t , trigger .Definition , destTrigger .Definition , "trigger definitions do not match for fingerprint %s" , trigger .Fingerprint )
1597- }
1555+ assert_fingerprints_match_in_source_and_target (t , srcTriggers , destTriggers , "triggers" )
15981556
15991557 srcDatatypes , err := srcManager .GetDataTypesByTables (ctx , schematables )
16001558 require .NoError (t , err , "failed to get source datatypes" )
16011559 destDatatypes , err := destManager .GetDataTypesByTables (ctx , schematables )
16021560 require .NoError (t , err , "failed to get destination datatypes" )
16031561
16041562 t .Logf ("checking functions are the same in source and destination" )
1605- for _ , function := range srcDatatypes .Functions {
1606- assert .Contains (t , destDatatypes .Functions , function , "destination missing function with fingerprint %s" , function .Fingerprint )
1607- }
1608- for _ , function := range destDatatypes .Functions {
1609- assert .Contains (t , srcDatatypes .Functions , function , "source missing function with fingerprint %s" , function .Fingerprint )
1610- }
1563+ assert_fingerprints_match_in_source_and_target (t , srcDatatypes .Functions , destDatatypes .Functions , "functions" )
16111564
16121565 t .Logf ("checking enum are the same in source and destination" )
1613- for _ , enum := range srcDatatypes .Enums {
1614- assert .Contains (t , destDatatypes .Enums , enum , "destination missing enum with fingerprint %s" , enum .Fingerprint )
1615- }
1616- for _ , enum := range destDatatypes .Enums {
1617- assert .Contains (t , srcDatatypes .Enums , enum , "source missing enum with fingerprint %s" , enum .Fingerprint )
1618- }
1566+ assert_fingerprints_match_in_source_and_target (t , srcDatatypes .Enums , destDatatypes .Enums , "enums" )
16191567
16201568 t .Logf ("checking composite types are the same in source and destination" )
1621- for _ , composite := range srcDatatypes .Composites {
1622- assert .Contains (t , destDatatypes .Composites , composite , "destination missing composite with fingerprint %s" , composite .Fingerprint )
1623- }
1624- for _ , composite := range destDatatypes .Composites {
1625- assert .Contains (t , srcDatatypes .Composites , composite , "source missing composite with fingerprint %s" , composite .Fingerprint )
1626- }
1569+ assert_fingerprints_match_in_source_and_target (t , srcDatatypes .Composites , destDatatypes .Composites , "composites" )
16271570
16281571 t .Logf ("checking domains are the same in source and destination" )
1629- for _ , domain := range srcDatatypes .Domains {
1630- assert .Contains (t , destDatatypes .Domains , domain , "destination missing domain with fingerprint %s" , domain .Fingerprint )
1572+ assert_fingerprints_match_in_source_and_target (t , srcDatatypes .Domains , destDatatypes .Domains , "domains" )
1573+ }
1574+
1575+ func assert_fingerprints_match_in_source_and_target [T schemamanager_shared.FingerprintedType ](t * testing.T , source , target []T , label string ) {
1576+ sourceMap := map [string ]T {}
1577+ for _ , item := range source {
1578+ sourceMap [item .GetFingerprint ()] = item
16311579 }
1632- for _ , domain := range destDatatypes .Domains {
1633- assert .Contains (t , srcDatatypes .Domains , domain , "source missing domain with fingerprint %s" , domain .Fingerprint )
1580+ targetMap := map [string ]T {}
1581+ for _ , item := range target {
1582+ targetMap [item .GetFingerprint ()] = item
16341583 }
1635- }
16361584
1637- func verify_postgres_column_spec (
1638- t * testing.T ,
1639- source , target * sqlmanager_shared.TableColumn ,
1640- ) {
1641- columnName := fmt .Sprintf ("%s.%s.%s" , source .Schema , source .Table , source .Name )
1642- assert .Equal (t , source .Name , target .Name , fmt .Sprintf ("column names do not match for column %s" , columnName ))
1643- assert .Equal (t , source .Comment , target .Comment , fmt .Sprintf ("column comments do not match for column %s" , columnName ))
1644- assert .Equal (t , source .DataType , target .DataType , fmt .Sprintf ("column data types do not match for column %s" , columnName ))
1645- assert .Equal (t , source .IsNullable , target .IsNullable , fmt .Sprintf ("column nullability does not match for column %s" , columnName ))
1646- assert .Equal (t , source .IdentityGeneration , target .IdentityGeneration , fmt .Sprintf ("column identity generation does not match for column %s" , columnName ))
1647- assert .Equal (t , source .GeneratedType , target .GeneratedType , fmt .Sprintf ("column generated types do not match for column %s" , columnName ))
1648- assert .Equal (t , source .GeneratedExpression , target .GeneratedExpression , fmt .Sprintf ("column generated expressions do not match for column %s" , columnName ))
1649- assert .Equal (t , source .ColumnDefaultType , target .ColumnDefaultType , fmt .Sprintf ("column default types do not match for column %s" , columnName ))
1650- assert .Equal (t , source .SequenceDefinition , target .SequenceDefinition , fmt .Sprintf ("column sequence definitions do not match for column %s" , columnName ))
1651- assert .Equal (t , source .ColumnDefault , target .ColumnDefault , fmt .Sprintf ("column default values do not match for column %s" , columnName ))
1585+ for fingerprint , item := range sourceMap {
1586+ assert .Contains (t , targetMap , fingerprint , "%s fingerprint %s not found in target: %v" , label , fingerprint , item )
1587+ }
1588+ for fingerprint , item := range targetMap {
1589+ assert .Contains (t , sourceMap , fingerprint , "%s fingerprint %s not found in source: %v" , label , fingerprint , item )
1590+ }
16521591}
0 commit comments