According to the firewall module, the "ipset" resource should take a space-delimited string containing an label corresponding to an ipset and either 'src', 'dst' or 'src,dst'. Unfortunately, it appears to have been coded in a way that does not recognize when the user has provided too few or too many arguments. See https://github.com/puppetlabs/puppetlabs-firewall/blob/893a3d863502508ef3bef79712b39097cf21dda2/lib/puppet/provider/firewall/iptables.rb#L808 . I'm not clear on what that code does, actually. Previously, the code supported the two-argument version along with `:tcp_flags` but that code was removed. See line 820. This appears to have been introduced by patches related to https://github.com/puppetlabs/puppetlabs-firewall/pull/615
Also, the acceptance spec only validates working examples; it does not test non-working ones (where the second option is not provided).