@@ -651,4 +651,119 @@ spec:
651651 Expect (event ).To (ContainSubstring ("PG 12 will no longer receive updates. We recommend upgrading." ))
652652 })
653653 })
654+
655+ Context ("PG Extensions" , func () {
656+ var cluster * v1beta1.PostgresCluster
657+
658+ BeforeEach (func () {
659+ cluster = create (`
660+ metadata:
661+ name: test-cluster
662+ spec:
663+ postgresVersion: 13
664+ image: postgres
665+ instances:
666+ - name: instance1
667+ initContainer:
668+ image: pg-operator
669+ dataVolumeClaimSpec:
670+ accessModes:
671+ - "ReadWriteMany"
672+ resources:
673+ requests:
674+ storage: 1Gi
675+ extensions:
676+ pgStatMonitor: false
677+ pgStatStatements: false
678+ pgAudit: false
679+ ` )
680+ Expect (reconcile (cluster )).To (BeZero ())
681+ })
682+
683+ AfterEach (func () {
684+ ctx := context .Background ()
685+
686+ if cluster != nil {
687+ Expect (client .IgnoreNotFound (
688+ suite .Client .Delete (ctx , cluster ),
689+ )).To (Succeed ())
690+
691+ // Remove finalizers, if any, so the namespace can terminate.
692+ Expect (client .IgnoreNotFound (
693+ suite .Client .Patch (ctx , cluster , client .RawPatch (
694+ client .Merge .Type (), []byte (`{"metadata":{"finalizers":[]}}` ))),
695+ )).To (Succeed ())
696+ }
697+ })
698+
699+ getSharedLibraries := func (cfg map [string ]any ) string {
700+ Expect (cfg ["bootstrap" ]).ToNot (BeZero ())
701+ bootstrap , ok := cfg ["bootstrap" ].(map [string ]any )
702+ Expect (ok ).To (BeTrue ())
703+
704+ Expect (bootstrap ["dcs" ]).ToNot (BeZero ())
705+ dcs , ok := bootstrap ["dcs" ].(map [string ]any )
706+ Expect (ok ).To (BeTrue ())
707+
708+ Expect (dcs ["postgresql" ]).ToNot (BeZero ())
709+ postgresql , ok := dcs ["postgresql" ].(map [string ]any )
710+ Expect (ok ).To (BeTrue ())
711+
712+ Expect (postgresql ["parameters" ]).ToNot (BeZero ())
713+ parameters , ok := postgresql ["parameters" ].(map [string ]any )
714+ Expect (ok ).To (BeTrue ())
715+
716+ Expect (parameters ["shared_preload_libraries" ]).ToNot (BeZero ())
717+ libraries , ok := parameters ["shared_preload_libraries" ].(string )
718+ Expect (ok ).To (BeTrue ())
719+
720+ return libraries
721+ }
722+
723+ It ("appends pg_stat_monitor after pg_stat_statements" , func () {
724+ ctx := context .Background ()
725+ orig := cluster .DeepCopy ()
726+
727+ cluster .Spec .Extensions .PGStatMonitor = true
728+ cluster .Spec .Extensions .PGAudit = true
729+
730+ Expect (suite .Client .Patch (ctx , cluster , client .MergeFrom (orig ))).To (Succeed ())
731+ Expect (reconcile (cluster )).To (BeZero ())
732+ Expect (cluster .Status .Patroni .SystemIdentifier ).To (BeZero ())
733+
734+ ccm := & corev1.ConfigMap {}
735+ Expect (suite .Client .Get (ctx , client.ObjectKey {
736+ Namespace : test .Namespace .Name , Name : cluster .Name + "-config" ,
737+ }, ccm )).To (Succeed ())
738+ Expect (ccm .Data ["patroni.yaml" ]).ToNot (BeZero ())
739+
740+ var cfg map [string ]any
741+ Expect (yaml .Unmarshal ([]byte (ccm .Data ["patroni.yaml" ]), & cfg )).To (Succeed ())
742+
743+ libraries := getSharedLibraries (cfg )
744+ Expect (libraries ).To (Equal ("pg_stat_monitor,pgaudit" ))
745+
746+ orig = cluster .DeepCopy ()
747+
748+ cluster .Spec .Extensions .PGStatStatements = true
749+ cluster .Spec .Extensions .PGStatMonitor = true
750+ cluster .Spec .Extensions .PGAudit = true
751+
752+ Expect (suite .Client .Patch (ctx , cluster , client .MergeFrom (orig ))).To (Succeed ())
753+ Expect (reconcile (cluster )).To (BeZero ())
754+ Expect (cluster .Status .Patroni .SystemIdentifier ).To (BeZero ())
755+
756+ ccm = & corev1.ConfigMap {}
757+ Expect (suite .Client .Get (ctx , client.ObjectKey {
758+ Namespace : test .Namespace .Name , Name : cluster .Name + "-config" ,
759+ }, ccm )).To (Succeed ())
760+ Expect (ccm .Data ["patroni.yaml" ]).ToNot (BeZero ())
761+
762+ var cfg2 map [string ]any
763+ Expect (yaml .Unmarshal ([]byte (ccm .Data ["patroni.yaml" ]), & cfg2 )).To (Succeed ())
764+
765+ libraries = getSharedLibraries (cfg2 )
766+ Expect (libraries ).To (Equal ("pg_stat_statements,pg_stat_monitor,pgaudit" ))
767+ })
768+ })
654769})
0 commit comments