github.com/apache/beam/sdks/v2@v2.48.2/go/test/integration/primitives/window_panes.go (about)

     1  // Licensed to the Apache Software Foundation (ASF) under one or more
     2  // contributor license agreements.  See the NOTICE file distributed with
     3  // this work for additional information regarding copyright ownership.
     4  // The ASF licenses this file to You under the Apache License, Version 2.0
     5  // (the "License"); you may not use this file except in compliance with
     6  // the License.  You may obtain a copy of the License at
     7  //
     8  //    http://www.apache.org/licenses/LICENSE-2.0
     9  //
    10  // Unless required by applicable law or agreed to in writing, software
    11  // distributed under the License is distributed on an "AS IS" BASIS,
    12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  // See the License for the specific language governing permissions and
    14  // limitations under the License.
    15  
    16  package primitives
    17  
    18  import (
    19  	"time"
    20  
    21  	"github.com/apache/beam/sdks/v2/go/pkg/beam"
    22  	"github.com/apache/beam/sdks/v2/go/pkg/beam/core/graph/window"
    23  	"github.com/apache/beam/sdks/v2/go/pkg/beam/core/graph/window/trigger"
    24  	"github.com/apache/beam/sdks/v2/go/pkg/beam/register"
    25  	"github.com/apache/beam/sdks/v2/go/pkg/beam/testing/passert"
    26  	"github.com/apache/beam/sdks/v2/go/pkg/beam/testing/teststream"
    27  )
    28  
    29  func init() {
    30  	register.Function3x0(PanesFn)
    31  
    32  	register.Emitter1[int]()
    33  }
    34  
    35  // PanesFn is DoFn that simply emits the pane timing value.
    36  func PanesFn(pn beam.PaneInfo, value float64, emit func(int)) {
    37  	emit(int(pn.Timing))
    38  }
    39  
    40  // Panes constructs a teststream and applies a pardo to get the pane timings.
    41  func Panes(s beam.Scope) {
    42  	s.Scope("increment")
    43  	con := teststream.NewConfig()
    44  	con.AddElements(1000, 1.0, 2.0, 3.0)
    45  	con.AdvanceWatermark(11000)
    46  	col := teststream.Create(s, con)
    47  	windowSize := 10 * time.Second
    48  
    49  	windowed := beam.WindowInto(s, window.NewFixedWindows(windowSize), col, []beam.WindowIntoOption{
    50  		beam.Trigger(trigger.Always()),
    51  	}...)
    52  	sums := beam.ParDo(s, PanesFn, windowed)
    53  	sums = beam.WindowInto(s, window.NewGlobalWindows(), sums)
    54  	passert.Count(s, sums, "number of firings", 3)
    55  }