[ 
https://issues.apache.org/jira/browse/BEAM-14546?focusedWorklogId=777639&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-777639
 ]

ASF GitHub Bot logged work on BEAM-14546:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 02/Jun/22 15:25
            Start Date: 02/Jun/22 15:25
    Worklog Time Spent: 10m 
      Work Description: damccorm commented on code in PR #17813:
URL: https://github.com/apache/beam/pull/17813#discussion_r888079762


##########
sdks/go/pkg/beam/testing/passert/count.go:
##########
@@ -30,6 +30,10 @@ func Count(s beam.Scope, col beam.PCollection, name string, 
count int) {
        if typex.IsKV(col.Type()) {
                col = beam.DropKey(s, col)
        }
+
+       if count > 0 {
+               NonEmpty(s, col)

Review Comment:
   Do we need to add the same thing to 
[Hash](https://github.com/apache/beam/blob/9e986e74efff2a7293ec5c7a86917479882d9590/sdks/go/pkg/beam/testing/passert/hash.go#L36)
 and 
[Sum](https://github.com/apache/beam/blob/9e986e74efff2a7293ec5c7a86917479882d9590/sdks/go/pkg/beam/testing/passert/sum.go#L33)?
 I think an empty pcollection would silently pass for both of those as well



##########
sdks/go/pkg/beam/testing/passert/count_test.go:
##########
@@ -22,24 +22,62 @@ import (
        "github.com/apache/beam/sdks/v2/go/pkg/beam/testing/ptest"
 )
 
-func TestCount_Good(t *testing.T) {
-       p, s := beam.NewPipelineWithRoot()
-       col := beam.Create(s, "a", "b", "c", "d", "e")
-       count := 5
+func TestCount(t *testing.T) {
+       var tests = []struct {
+               name     string
+               elements []string
+               count    int
+       }{
+               {
+                       "full",
+                       []string{"a", "b", "c", "d", "e"},
+                       5,
+               },
+               {
+                       "empty",
+                       []string{},
+                       0,
+               },
+       }
+       for _, test := range tests {
+               t.Run(test.name, func(t *testing.T) {
+                       p, s := beam.NewPipelineWithRoot()
+                       col := beam.CreateList(s, test.elements)
 
-       Count(s, col, "TestCount_Good", count)
-       if err := ptest.Run(p); err != nil {
-               t.Errorf("Pipeline failed: %v", err)
+                       Count(s, col, test.name, test.count)
+                       if err := ptest.Run(p); err != nil {
+                               t.Errorf("Pipeline failed: %v", err)
+                       }
+               })
        }
 }
 
 func TestCount_Bad(t *testing.T) {

Review Comment:
   Can we simplify and combine these tests into 1 by adding a `expectErr` 
variable to the tests struct?





Issue Time Tracking
-------------------

    Worklog Id:     (was: 777639)
    Time Spent: 1h  (was: 50m)

> [Go SDK] passert.Count succeeds for empty PCollections.
> -------------------------------------------------------
>
>                 Key: BEAM-14546
>                 URL: https://issues.apache.org/jira/browse/BEAM-14546
>             Project: Beam
>          Issue Type: Improvement
>          Components: sdk-go
>            Reporter: Robert Burke
>            Assignee: Jack McCluskey
>            Priority: P3
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> https://github.com/apache/beam/blob/sdks/v2.39.0/sdks/go/pkg/beam/testing/passert/count.go#L28
> Since it's using a Combine to do the count, it never executes for empty 
> Pcollections, and is unable to fail.
> The fix is: when count > 0, plumb the pcollection through as a side input to 
> a DoFn that requires the side input to be non-empty. This would catch the 
> empty PCollection case.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to