Data model builder should find xsd datatypes for populating the range of values

xsd number does not exist. See list of valid number types:

Created ticket #2130 and closed this one.


Add django 4.1+ compatibility.

ImportError: cannot import name 'force_text' from 'django.utils.encoding'

Noted

Done
https://pypi.org/project/django-admin-commands2/1.1.2/
Thanks !

Thank you!


OIPA-2450

https://app.zenhub.com/workspaces/iaticloud-5b8e865bb2cc7b6c78ece322/issues/zimmerman-team/iati.cloud/2450

:tada: This PR is included in version 5.5.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Update page.tsx

Here you don't have to use Link component since it should redirect you to external source.
Great newsletter, btw 😊

Thanks. Happy rick rolling


Typescript: GraphQL type [String] should allow single strings

If I have following input schema:
input Test {     value: [String]! }
The resulting Typescript schema looks like this:
value: Array<Maybe<Scalars['String']>>;
So Typescript only allows arrays as "value" for an instance of "Test".
But GraphQL specifications would allow a single sting.
I would expect the Typescript schema of "value" to look like this:
value: Array<Maybe<Scalars['String']>> | Maybe<Scalars['String']>;
What do you think? Does it sound useful?

Thank you @draco2007 , tracking this here: https://github.com/dotansimha/graphql-code-generator/issues/2684


Function is not calling.

Please answer the following before submitting your issue:
Note: Please include any substantial examples (debug session output,
stacktraces, etc) as linked gists.

What version of Delve are you using (dlv version)-
Delve Debugger
Version: 1.0.0-rc.1
Build: 5c9b2009cab214c1f912a2d8c6c89eec9f3ada2b
What version of Go are you using? (go version)?- go version go1.8.3 linux/amd64
What operating system and processor architecture are you using?- ubuntu16.04.3 LTS
What did you do?
What did you expect to see?
What did you see instead?

I am trying to print local variables and its values till the breakpoint. For this, I am trying to change the code and create a cmd "verbose"
/pkg/terminal/command.go
val, err := t.client.GetVariable(ctx.Scope,t.loadConfig())
/service/client.go
//get all variable
`	func (c *RPCClient) GetVariable(scope api.EvalScope, cfg api.LoadConfig) (*api.Variable, error) {
	var out EvalOut
	//err := c.call("Eval", EvalIn{scope, expr, &cfg}, &out)
	return out.Variable, nil
}

/pkg/proc/variables.go
func (scope *EvalScope) GetVariable(cfg LoadConfig) (*Variable, error) {
 fmt.Println("GetVariable")

 var  i *Variable
 /*vars, err := scope.variablesByTag(dwarf.TagVariable, nil)

 if err != nil {
 fmt.Println("Error while fetching the variable  ",err)
 }

 for i := range vars {
 fmt.Println("variabkes ",vars[i].Name)
 }*/
 return i, nil
}

But GetVariable() is not calling i.e. GetVariable is not printed.
Is there anywhere I need to define function?
P.S.- This is not a bug. I am not able to find the solution elsewhere that's why putting it here.

You need to plumb any new api call through all the service layer (service/rpc2/server.go and service/debugger/debugger.go). What's the point of this new function? Eval already exists.

I am trying to print all the local variable with its value. How we plumb new api ? How we write the function @aarzilli

I am trying to print all the local variable with its value.

This also exists, it's called ListLocalVariables.

so basically ListLocalVariables list all the local variables in one go. What I want is print the local variable as the program executed.
Let's suppose there is 10 line of the program, then it should print the status of the local variable for each line.

Thanks for ListLocalVariables
@aarzilli  Check out my gist https://gist.github.com/Ankur008/e5a740ac33948744877b1b6594714670
I am calling the locals at line no 52,
But I am getting the fixed output i.e. variable value is not changing throughout the program. Can you check why this is happening?


.h files in separate directories not found

Just downloaded and tried to compile this library with Arduino IDE 1.8.13 for use with a Teensy 4.1. I get the following error message for multiple .h files, all of which are in the library's sudirectories:
C:\Users\TS1\Documents\Arduino\libraries\SdFat-beta-master\src\FsLib/FsFile.h:33:31: fatal error: ExFatLib/ExFatLib.h: No such file or directory compilation terminated. Error compiling for board Teensy 4.1.
I can patch it by editing the .h file in question (in this case src/FsLib/FsFile.h), and adding the full address of the missing file:
#include "C:\Users\TS1\Documents\Arduino\libraries\SdFat-beta-master\src\FatLib/FatLib.h"
This is the limit of my knowledge, but my interpretation is that #include ExFatLib/ExFatLib.h is not the correct method for including a .h file that's in a separate folder under the root directory.

You must name the library SdFat so the path is C:\Users\TS1\Documents\Arduino\libraries\SdFat, not C:\Users\TS1\Documents\Arduino\libraries\SdFat-beta-master.
The Arduino IDE will cause the src directory to be an include path when it reads the library.properties file.


Bug in index.query() prevents content from similar documents to be included in LLM query

Index.query() does not use the content of 'similar documents'. The variable 'merged_context' in def query() is always empty. Effectively, this means that the RAG functionality of index.query() is not working.
The reason is that 'similar_documents' is of type iterator. After 'similar_documents' is used in 'sources', the iterator cannot be used again in 'merged_context'. The solution is to convert the iterator to a list at an earlier stage.

I've given it some more thought. This solution is only a temporary fix and not future-proof, as it breaks the iterator chain downstream. A better approach might be to create the iterator twice, assuming that creating iterators is relatively inexpensive.
similar_documents_dedup = self.backend_index.similarity_search(query_embedding)
sources = self._deduplicate_list(
            self.get_converter().bulk_from_documents(similar_documents_dedup)
        )

similar_documents_merge = self.backend_index.similarity_search(query_embedding)
merged_context = "\n".join(doc.metadata["content"] for doc in similar_documents_merge)

Good catch thank you @berry!
I don't think we need to be too concerned about persisting the iterator in the QueryResponse - it's going to be cheaper to convert to a list than regenerate that similarity response.
It would be great to have some tests to catch this issue in the future though - if you have time to add them that would be great.

Thanks! I will try to write a test. I don’t write Python tests very often. When I follow the instruction in the README, the installation process is difficult. I get a lot of ‘INFO: pip is looking at multiple versions of […] to determine which version is compatible with other requirements. This could take a while.’ The installation takes forever. Anyway, I will give it another try.

When I follow the instruction in the README, the installation process is difficult. I get a lot of ‘INFO: pip is looking at multiple versions of […] to determine which version is compatible with other requirements. This could take a while.’ The installation takes forever.

@berry could you open a separate issue with log of pip is looking at multiple versions of ?
And any other relevant information that may help us speed things up

Thanks @berry - I've rebased, tweaked your change to use the new method name and added a test for now so we can get this fix in ASAP. Feel free to add more in another PR if you're interested.
Thanks again for your help with this!


wrap text around an image

Description
It's 2023 and react-native still doesn't have an alternative to "float" like in CSS for wrapping text around an image.
Can someone at least port this kotlin library to react-native?
https://github.com/oleksandrbalan/textflow
React Native Version
0.71.0
Output of npx react-native info

Steps to reproduce

Snack, screenshot, or link to a repository

⚠	Issue is a Question
ℹ	We are using GitHub issues exclusively to track bugs in React Native. GitHub may not be the ideal place to ask a question, but you can try asking over on Stack Overflow, or on Reactiflux.

They cannot offer a solution since the react-native platform itself does not allow this.
Topics on stackoverflow have been around since 2012 and none of them have solved this problem.


Multiscale SInDy

https://iopscience.iop.org/article/10.1088/2515-7639/ab291e/pdf

I think we have the tooling basically setup. I'll work on recreating the examples of the paper.


Remove docs/ directory

These docs are outdated. Let's prefer docs in cugraph repo for now.

/merge


Feature/shared refactor

@waterplea git rebase HEAD~3 --onto origin/feature/marketplace-refactor
I can't push to your branch, so I can't do it for you.


⚠ Bofrost.be has degraded performance

In e5b2b05, Bofrost.be (https://www.bofrost.be) experienced degraded performance:

HTTP code: 200
Response time: 1450 ms

Resolved: Bofrost.be performance has improved in b552733 after 35 minutes.


Build Matrix for Xcode 8/8.3/9 (for #105)

It looks like project works only for Xcode 8. It should work across all Xcode versions. This is for #105 (cc @fpillet )

Probably also cc @ashfurrow

CI failed because of SPM, like in the swift4.0 branch because the strict layout for the Tests folder and subfolders that SPM wants is too loose in Action. In swift4.0 I disabled compiling tests in CI for SPM until we resolve this layout issue.

I've merged in from master, which contains #106. Hopefully we'll get more granular testing feedback from now on. Thanks again!


Collaborative wallet creation: It gives different error if QR is not scanned properly.

https://github.com/bithyve/bitcoin-keeper/assets/62699947/2a879711-2cb0-4462-b105-971c730b5623
https://github.com/bithyve/bitcoin-keeper/assets/62699947/6b5e9a69-25ee-4e87-ab89-6706ce652c8c

As in the video, the error occurred when I put shadow/light on the QR.

Closing as outdated


Improve Ctrl+/ for commenting and uncommenting

Lite XL inherits the rather simplistic behavior of lite, where when you press / it'll append syntax.comment .. ' ' to the beginning of the line, unless the line already begins with syntax.comment .. ' ', in which case it'll remove that part. I feel like there's definitely some room for improvement here.
For instance, I use cargo fmt before commiting my work to the git repository, and it reformats all indentation in the project. This means that it turns this, which is what lite does when you use Ctrl+/:
fn test() {
//     println!("Hello, world!");
}

into this:
fn test() {
    //     println!("Hello, world!");
}

Which prevents me from uncommenting the line later by using Ctrl+/ again, as instead lite will do this:
fn test() {
//     //     println!("Hello, world!");
}

Which is the exact opposite of what I wanted to do.
So here are my proposed improvements:

Instead of appending the comment before indentation, append it after indentation, before the first non-whitespace character on the line.
Instead of removing the comment only if it's at the very beginning of a line, skip existing whitespace at the beginning, and when a comment is found, remove that, while preserving leading whitespace.

This was already in my todo list, I agree with you that the current behavior can be improved. These are small but important details when programming. Please go ahead if you feel you want to implement this.
Another similar thing that can be improved is the indentation behavior when hitting "tab". In this case also the current implementation is okay but rather simplistic. The problem happen when you are midway between two valid indentation positions.

True, indentation is also another thing that annoys me a bit but I'd rather split this into another issue.

Another thing that irks me with comments: in Neovim, once I started a comment, it would automatically continue it on the next line once I created one. This can be done with a separate plugin though, as I don't think this is behavior everyone would like.

Another thing that irks me with comments: in Neovim, once I started a comment, it would automatically continue it on the next line once I created one. This can be done with a separate plugin though, as I don't think this is behavior everyone would like.

I would despise this, so +1 for this as a plugin.
That said, I'm willing to take this on and fix the uncommenting as this has bugged me too. I'll work on it now.

@franko Also, I'm noticing as I'm going through this that commenting/uncommenting is not using doc_multiline_selection. I imagine we should be using that for consistency; so I'm going to change it, but correct me if I'm wrong.


fix(compiler-sfc): check static default of computed key of object method

Before
After

Closing as we are deprecating withDefaults()

Landed in 482f2e34


build missing binary linux-pivkey-pkcs11key-arm64 and format indentation

Summary

build missing binary linux-pivkey-pkcs11key-arm64
format indentation

Codecov Report

Merging #2595 (e41cf70) into main (6fc34f2) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main    #2595   +/-   ##
=======================================
  Coverage   30.09%   30.09%
=======================================
  Files         146      146
  Lines        9113     9113
=======================================
  Hits         2743     2743
  Misses       5961     5961
  Partials      409      409

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

i still need to fix the build for pivkey in arm64 :(


Opaque zero / one idea: determinant of matrix

The determinant of a zero matrix is zero.  More generally, there are various ways to construct a matrix of ones and zeros such that its determinant is zero.  For example, the determinants of the following matrices are all zero (using column-major notation):
mat2(0, 0, 0, 0)
mat2(1, 1, 1, 1)
mat2(1, 1, 0, 0)
mat2(0, 1, 0, 1)
mat2(1, 0, 1, 0)
mat2(0, 0, 1, 1)
mat2(1, 0, 0, 0)
mat2(0, 1, 0, 0)
mat2(0, 0, 1, 0)
mat2(0, 0, 0, 1)
We could make zero via det(a matrix whose determinant is guaranteed to be zero).  Not sure how to do this efficiently for mat3 and mat4 types, but there must be a way.
The determinant of the identity matrix is 1.

Closed via #648.


Previous files are ordered in a weird way I guess?

Thanks for wanting to bring an issue to our attention!

Before you open a ticket, please do a quick search of the existing issues to see if it's already been brought up.

Please note that this repository is strictly for metadata (issues relating to incorrect information about mods, missing versions, or incorrect installations). If you want to suggest something or report a bug relating to CKAN as a whole, open the issue in: https://github.com/KSP-CKAN/CKAN

I had installed the Karibou Rover by Umbra Space Industries (RoverDude) a while ago, and I was doing mod updates to catch me up on 1.2.2's latest release, and it told me that it was trying to overwrite another mod's files, but that mod wasn't actually listed in the modlist, so I deleted it locally and tried to find which update was trying to ghost update, but now it's trying to update a mod that doesn't exist anymore. And I'm confused.

On going through my mod updates one by one, I think it might be because USI MKS merged some of its child folders in a way CKAN doesn't understand, and I can't figure out how to get it to recognize however its newly structured to not bug out on me when updating.

My understanding is that Karibour Rover is now part of MKS, so just uninstall the separate mod.

That's just the thing, Karibou Rover is now no longer listed on my mod installs and trying to remove it manually has it throwing even more errors as it tries to update something that doesn't exist.

If you select the "Installed" filter, you should see it.

Whelp. Thanks. I'm so used to being on compatible.


Active anchor not updating on scroll

The active anchor doesn't automatically update. It needs to be clicked to update.

First, I thought it was a problem after changing the styles, but it doesn't work with the default style.

It doesn't change if the anchor is selected either. Not even on the demo.

Do you have a repo or code you can share?

It´s a problem from Edge, just it out with Chrome and it works perfectly.

Sweet! I still can't reproduce this problem with Microsoft Edge on my mac, but let me know if this issue disrupts your use case in the future.


Facebook linked account

how we can login into an account that was created from facebook account?

The script doesn't implement a way to login with facebook. However, you can do a bypass.

Find out what is your Instagram Session Token and expiry (It's inside a cookie in your browser such as google chrome with the following domain: instagram.com)
Next to script.py create a folder called cookies
Create a file called {username}.json if your instagram name is bardas then bardas.json
Write {"domain": ".instagram.com", "expiry":<PHONE_NUMBER>.497126, "httpOnly": true, "name": "sessionid", "path": "/", "secure": true, "value": "0000000000000"}
Edit the expiry and value (the other ones are the same)
Save and run


dyalog: isolates (parallel forEach and co) appear to be broken

Describe the bug
Isolates parallelEach doesn't work
Steps To Reproduce
Steps to reproduce the behavior:
run nix develop with
        devShells.default = with pkgs; mkShell rec {
          buildInputs = [
            (unfreePkgs.dyalog.override {
              acceptLicense = true;
            })
          ];

then run: dyalog
then in the dyalog repl type
)load isolate
⎕DL isolate.llEach (1 2 3)

Expected behavior
⎕DL isolate.llEach (1 2 3) returning
1.00383 2.003841 3.004522

like its the case when using the .deb on lets say a debian host
Additional context
strace log reveals a lot of lines like
clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=10000000}, NULL) = 0
.... (hundreds of times)
clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=10000000}, NULL) = 0

which does not happen on a debian host when I install dyalog 19 via dpkg -i
I have also tested this on a debian host that has nix installed and installed dyalog via nix instead of dpkg
but I run into the same issue making me believe there is something wrong with the drv
Notify maintainers
@TomaSajt
@markus1189
Metadata
system: "x86_64-linux", multi-user?: yes, version: nix-env (Nix) 2.18.2, nixpkgs: /etc/channels/nixpkgs
(I ran it against the current (1 hour ago) nixpkgs master/unstable branches) as in I pulled these 2 about 1 hour ago

I'll see what I can do about this.
In the meantime, could you change the issue title to start with dyalog: ?

I'll see what I can do about this. In the meantime, could you change the issue title to start with dyalog: ?

sure

Phew, finally found it! The issue was with the APLProcess class, which auto-crashed when created. I redirected its output to a file, and it turns out that because I didn't patch dyalog.rt to require ncurses it wasn't able to load it, thus erroring out.

Phew, finally found it! The issue was with the APLProcess class, which auto-crashed when created. I redirected its output to a file, and it turns out that because I didn't patch dyalog.rt to require ncurses it wasn't able to load it, thus erroring out.

This is awesome, thanks for the incredibly fast response/fix time. I suspected it was something like this I initially thought that maybe some of the libraries weren't copied over since the nix expression is a little pickier than just cp *.so $out/lib but upon fixing that nothing change really. Usually knowing when to apply patchelf is quite clear as software will let you know if a library is missing so throwing ldd against it generally gives some pretty good insight.
Though if you'd like sharing this information, would you mind telling me how  you found out? Was it just intuition or did you use some sort of tool to debug it to come to the conclusion that this may be the issue. As i couldn't really get hold of logs making any sense when I tried it. This would be quite interesting to me as I most likely will get to fix more dyalog stuff in the future.

Phew, finally found it! The issue was with the APLProcess class, which auto-crashed when created. I redirected its output to a file, and it turns out that because I didn't patch dyalog.rt to require ncurses it wasn't able to load it, thus erroring out.

This is awesome, thanks for the incredibly fast response/fix time. I suspected it was something like this I initially thought that maybe some of the libraries weren't copied over since the nix expression is a little pickier than just cp *.so $out/lib but upon fixing that nothing change really. Usually knowing when to apply patchelf is quite clear as software will let you know if a library is missing so throwing ldd against it generally gives some pretty good insight.
Though if you'd like sharing this information, would you mind telling me how you found out? Was it just intuition or did you use some sort of tool to debug it to come to the conclusion that this may be the issue. As i couldn't really get hold of logs making any sense when I tried it. This would be quite interesting to me as I most likely will get to fix more dyalog stuff in the future.

First of all, I somehow got my hand on the aplcore file that lists where it crashed exactly, then looked through it, found the definitions in the namespace explorer.
It looked like it was supposed to start some processes and then connect to them, however they exited immediately. I was able to verify this by printing procs.HasExited in isolate.ynys.InitProcesses.
procs is an array of new APLProcess objects, so I looked up the docs, and it turns out you can specify an OutFile, which specifies where a process should dump its logs (its the 5th parameter of ⎕NEW APLProcess), so I overrode that to point to some known location. That file contained the following:
Unable to load terminfo library:
libncurses.so.5: cannot open shared object file: No such file or directory
Without it, the tty version of Dyalog APL will not function properly.
Please install libtinfo or libncurses.

Dyalog APL could not initialise.

In 18.2 libncurses was required by the binary, so autoPatchelfHook took care of it. However in 19.0 they probably changed it to load libnurses dynamically using dlopen which can't be auto-detected with autoPatchefHook. I had to use --add-needed with the normal dyalog binary to make it work, but I didn't know what dyalog.rt was so I didn't do anything with it.

Note: in 19.0 a new binary named dyalogc appeared, however I don't know where it's used, so I don't know what I should do with it. Might have to ask around for it.

Phew, finally found it! The issue was with the APLProcess class, which auto-crashed when created. I redirected its output to a file, and it turns out that because I didn't patch dyalog.rt to require ncurses it wasn't able to load it, thus erroring out.

This is awesome, thanks for the incredibly fast response/fix time. I suspected it was something like this I initially thought that maybe some of the libraries weren't copied over since the nix expression is a little pickier than just cp *.so $out/lib but upon fixing that nothing change really. Usually knowing when to apply patchelf is quite clear as software will let you know if a library is missing so throwing ldd against it generally gives some pretty good insight.
Though if you'd like sharing this information, would you mind telling me how you found out? Was it just intuition or did you use some sort of tool to debug it to come to the conclusion that this may be the issue. As i couldn't really get hold of logs making any sense when I tried it. This would be quite interesting to me as I most likely will get to fix more dyalog stuff in the future.

First of all, I somehow got my hand on the aplcore file that lists where it crashed exactly, then looked through it, found the definitions in the namespace explorer. It looked like it was supposed to start some processes and then connect to them, however they exited immediately. I was able to verify this by printing procs.HasExited in isolate.ynys.InitProcesses. procs is an array of new APLProcess objects, so I looked up the docs, and it turns out you can specify an OutFile, which specifies where a process should dump its logs (its the 5th parameter of ⎕NEW APLProcess), so I overrode that to point to some known location. That file contained the following:
Unable to load terminfo library:
libncurses.so.5: cannot open shared object file: No such file or directory
Without it, the tty version of Dyalog APL will not function properly.
Please install libtinfo or libncurses.

Dyalog APL could not initialise.

In 18.2 libncurses was required by the binary, so autoPatchelfHook took care of it. However in 19.0 they probably changed it to load libnurses dynamically using dlopen which can't be auto-detected with autoPatchefHook. I had to use --add-needed with the normal dyalog binary to make it work, but I didn't know what dyalog.rt was so I didn't do anything with it.
Note: in 19.0 a new binary named dyalogc appeared, however I don't know where it's used, so I don't know what I should do with it. Might have to ask around for it.

thanks for taking the time to outline how you came to that conlcusion im sure that will help me in the future. Sorry for forgetting to close this its closed now

Well, the fix isn't merged yet, so I think that this issue staying open was not a problem.

Well, the fix isn't merged yet, so I think that this issue staying open was not a problem.

oh sorry I forgot as I used the branch locally and then after many weeks I saw its still opened and somehow was under the assumption that it was merged. Sorry I skipped that


Certificate Expiry Notification doesn't work for me... any ideas?

⚠ Please verify that this bug has NOT been raised before.

[X] I checked and didn't find similar issue

🛡 Security Policy

[X] I agree to have read this project Security Policy

📝 Describe your problem
Pushbullet notifications. UP/DOWN alerts arrive fine. Test notification is OK too.
Certificate Expiry Notification is set for all configured monitors.
Settings -- Notifications -- TLS Expiry default to  7 & 14 & 21 days
On the monitor's dashboard Cert Exp. determined correctly. But no mention of expiry in the log either.
What do I do wrong here? Appreciate any help.
Cheers
🐻 Uptime-Kuma Version
1.17.1
💻 Operating System and Arch
Ubuntu 20.04.04 LTS x64
🌐 Browser
Chrome 103.0.5060.114
🐋 Docker Version
No response
🟩 NodeJS Version
14.19.3

Have you selected "Ignore TLS Error" for your monitor?
What is the protocol of the url of your monitor (e.g. https://)?

Protocol is https
Cert Exp. is determined properly
I'm puzzled. Cheers for the help!

Thanks, looking at the code I realized some older notification types may not support sending the expiry message, and will default back to sending the test message. If you received a random "Testing Successful" notification that's probably why.
We will probably have to check all the notification types to see which are affected.

Sure I did get those "Testing Successful" notifications... I thought they were rather a feature not a bug :)
Thanks for your time and effort fixing this.

Unfortunately it's still not solved for PushBullet. Much appreciation if anybody can work on this one.

Just checked the implementation, it do not handle general message correctly.
https://github.com/louislam/uptime-kuma/blob/c662d259b0a59e59a650f00a04253e0d81707ab2/server/notification-providers/pushbullet.js#L21-L27


[WIP] M3-5531: Handle IPv6 Range Deletion

Description
Add support for deleting IPv6 Ranges
How to test
While pointed at dev, add IPv6 range through the API with something like: curld networking/ipv6/ranges POST '{"linode_id":<linode_id>,"route_target":<route_target>,"prefix_length":64}' , delete created IPv6 range in CM, confirm success

Components deduplicated and combined back into 1, and converted into functional components


auth: log client for failed authentication

Trying to debug auth errors, its pretty very hard without context
[ ] Configuration Infrastructure
[ ] Docs
[ ] Installation
[ ] Networking
[ ] Performance and Scalability
[ ] Policies and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure

@howardjohn: The following test failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

integ-distroless-k8s-tests_istio
1ec7bdc22c87f481290a471f713061ef197839ef
link
/test integ-distroless-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

/retest


Removed Stilo, added MLabs

Stilo's product implemented in Haskell has been sold off, and seems to be dead.

Thanks for the update! Seems the addition of Stilo was based on a 5 year old reddit comment so I will remove it


notebook with cpp introduction

I decided to have a different repository with mtp1 content and let this repository as a example template


MudDatePicker not respecting ReadOnly in PickerVariant.Static

Bug type
Component
Component name
MudDatePicker
What happened?
When using a DatePicker in static mode, it doesn't respect ReadOnly, when setting ReadOnly to true, it still lets you interact with the control and select a date.
Expected behavior
No date selection possible when readonly.
Reproduction link
https://try.mudblazor.com/snippet/wkcxaUbCPPrHTiyy
Reproduction steps

Add DatePicker
Set to PickerVariant.Static
Set to ReadOnly
Interaction is still occuring.

Relevant log output
No response
Version (bug)
6.4.1
Version (working)
No response
What browsers are you seeing the problem on?
Firefox, Chrome, Microsoft Edge, Safari, Other
On what operating system are you experiencing the issue?
Windows, Mac OSX, Linux, iOS, Android, Other
Pull Request

[ ] I would like to do a Pull Request

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Anything on this please, same goes for time picker as well on static mode.

@binbsr Niche issue so it's unlikely to be fixed unless someone submits a PR


Notation for split complex numbers vs quaternions

The use of j occurs both for split complex numbers and for quaternions.

One idea is to use j for split complex numbers and i2 for quaternions.


Make gtests running with new user interface

Improved the gtests and make them running with the new user interface
with the UpnpLib structure.

Could you maybe just uncomment lines 380-387 from the main CMakeLists.txt? I mean, it's nice to have a shell-script with hardcoded paths to thirdparty-software which just isn't there to have it run in the automated test-env, but I would like more to see if it works. With this you could also see if points 2 and 3 of your ToDo is already done.
Or do I get that wrong, and this is our task, and if you extend this to work on win, we'll get some VS-projects for this. Btw. if it doesn't work on win, uncomment the lines 379 and 388 also to deactivate on win.
And yes, if something cmake-related goes wrong, you can expect me to send you a pr with the fixes, so it will be merged with your changesm which I consíder the more correct way than doing that afterwards.

Hi Ingo,
I am a bit confused on how am I supposed to use your infrastructure to test.
I did
$ ../compile.sh test_tools.cpp
g++: error: /home/user/devel/pupnp-dev/pupnp/lib/libgtestd.a: No such file or directory
g++: error: /home/user/devel/pupnp-dev/pupnp/lib/libgmockd.a: No such file or directory
g++: error: /home/user/devel/pupnp-dev/pupnp/upnp/libupnp.a: No such file or directory
g++: error: /home/user/devel/pupnp-dev/pupnp/ixml/libixml.a: No such file or directory

Do I have to install something by hand on my system?
If that is work in progress, I could commit it since it does not currently affects the general tests, but maybe you should consider Vollstrecker 's suggestions.
BTW, @Vollstrecker , I am also a bit confused about the line numbers you are mentioning, they don't make much sense when I look at CMakfile.txt. Lines 379 and 388 are not commented here, but maybe I am looking at the wrong file.

https://github.com/pupnp/pupnp/blob/d1247f083cf01f1774615c020e80cb6233c4d6eb/CMakeLists.txt#L480
And for the compile-errors, that's what I meant. He once let cmake download (and maybe build) gtest and then hardcoded all paths to there. This was before the change with the libname. The "all produced bin's got to ./lib/" was the workaround for that to let the tests pass.

@mrjimenez Googletest and Googlemock isn't downloaded and installed anymore with cmake as before. That is of course needed. I will look after the suggestions as far as we have a stable cmake environment that can run the gtests without configure and builds and accept pull requests.

What do you mean with "without configure and builds on it"?

By the way, as evaluated from the README https://github.com/pupnp/pupnp#107-cmake-build I have used before
cmake . -DDOWNLOAD_AND_BUILD_DEPS=ON -DBUILD_TESTING=ON
cmake --build .

There is a typo in the README that will give an error message. There is a missing S at then end in -DDOWNLOAD_AND_BUILD_DEP=ON. Also chapter 5.2 for other options isn't available.

Seems like one test fails, but at least they compile. Win is activated, but (I guess) the fork was done before the fixes for tv_device, so I can't see if this would work, but deactivation is already prepared in there.

Ups, wrong button

@mrjimenez To elaborate to your questions in more depth:

Do I have to install something by hand on my system?

The compile.sh is just for a quick test and not the final solution. You can edit it and point the BUILD_DIR= to even that. But it will not find libgtestd.a and libgmockd.a if it isn't installed from an old installation. From a initial pull it will not install as before with:
cmake . -DDOWNLOAD_AND_BUILD_DEPS=ON -DBUILD_TESTING=ON
cmake --build .

If that is work in progress, I could commit it since it does not currently affects the general tests

Yes, it is work in progress and the compile.sh cannot be used for production. But to have the gtests available a commit would be helpful.

maybe you should consider Vollstrecker 's suggestions.

Of course, but it is difficult for me to check it without Googletest and Googlemock installed.
@Vollstrecker can you please provide download and installation of Googletest and Googlemock again as already done before? But please don't modify things in the gtest directory at this time. I need the current situation to verify what's going on also with your suggestions.

https://github.com/ingo-h/pupnp/pull/1

@Vollstrecker merged the patch and Googletest and Googlemock is installing now again. But we have also the same situation as before!
The gtests itself MUST NOT run on pull request. It does not make sense. We have tests that WILL fail because of found bugs in the library https://github.com/pupnp/pupnp/issues/247 https://github.com/pupnp/pupnp/issues/272. The tests are made to show it to the responsible developer and he can check his fix against the successful running test then. That is the workflow. Another issue is that I cannot ensure at time that the tests can run successful on the pull request check because i don't know the test environment there. Of course unit tests should run isolated independent from the environment but at this stage they are still too "weak" and does not catch all side effects.
So what is to do to switch off running gtests on pull request?

I don't think you have the right concept of tests. Test are to be run on pull-requests to ensure that a change doesn't break anything, If you want to deliver a proof of a failure, split it out to a separate file that can be built as a separate bin.
Or better change the test that it succeeds as long as the error is present and name it so everyone can see that something is wrong when this succeeds.
If it's the workflow like you describe it, it's just wrong. What project takes the time to implement gtest with gmock, just to demonstrate something is not working. You described the scenario at least good enough that I understand the problem, so I'm pretty sure the others got a good idea of where the problem is, and they will sort it out.
And for the defined test-env. You insisted that every test should be mockable. The concept of mocking is to define my own env independendly from the physical present one.

And yes, failing test should reside in a separate file, because when @mrjimenez got the problem fixed, he can just throw away that one, and the one that should succeed if the problem is fixed, then just needs to be activated to make sure it won't be broken again.

As you tend to not see it: https://github.com/ingo-h/pupnp/pull/2
I marked 4 tests as WILL_FAIL. The init-test fails on ubuntu 18 and 20 while succeeding on ubuntu 16. I'll leave it up to you to interpret the output.

@Vollstrecker

I don't think you have the right concept of tests. [..]
If it's the workflow like you describe it, it's just wrong.

No.
This is not the place to explain how Test-driven development works but you should make you familiar with it as described at Wikipedia:

Test-driven development (TDD) is a software development process relying on software requirements being converted to test cases before software is fully developed, and tracking all software development by repeatedly testing the software against all test cases. This is opposed to software being developed first and test cases created later.

and tracking all software development by repeatedly testing the software against all test cases

There it is. When you want repeatedly testing, you can either rely on each dev running the tests before they commit (even the ones that po up, fixing (or trying to) something and then never come back), or you can automated testing and test everything publicly before comitting anything.

I want to do my work within the gtest directory without disturbing other people work and without always fighting against your restrictions.

Why my restrictions.marcello wasn't even able to compile your work, I provided you the framework because you just said you want to migrate the tests.
If you want to do your work, then you should first clarify what this is. You want to write tests, test that are needed to be compiled by hand, and this just to prrof you've found a problem. Are you going to fix it then, or should someone else do this and then delete the "tests", or adjust them to reflect the fix?
You asked how gtest can be integrated, so I stalled 2 other projects to integrate this, and to integrate everything that comes with it into CmDaB (was planned for later anyways but didn't fit the shedule). 3 days of work later this was up and running. Then you came up with "how should this work", some explanations later I again stalled the other works and made it easier for you again. Now you come with "it's not integrated" and "it's not supposed to be integrated" and "It's just my stuff, integrate it so I can use it and then ignore it".
So yes, my rule is just "tell me what you want or I'll just do nothing and ignore you". If you want tests that fail, you can, but don't expect me to do anything about it. I just wait until the maintainer makes a decision, maybe tell him if I have concerns (and he is someone that isn't pissed to explain it's reasons and is able to name what he wants), and then I'll do exactly what's the outcome of this.

Hi Folks,
Please correct me if I am wrong.
Since as Ingo stated that this is work in progress, I have nothing against it as long as it does not breaks the sanity checks, which it currently is not the case. So fix it and I will commit.
Regarding compile.sh, again, since this is WIP, no problems here, but I would also like to run the code, so I ask you to leave the instructions in a comment in this file, something like "Change this variable according to your path", "don't forget to run $ cmake bla bla bla" or "you must install lib_blablabla from your distribution", so that I know what I am missing.
I understand that all this will eventually become part of the sanity checks, but for now it must be enabled just enough to not make the checks fail, or am I missing something?
Other than that, I thing this is good work and certainly worth developing.

The wip-status itself is no problem at all.

Since as Ingo stated that this is work in progress, I have nothing against it as long as it does not breaks the sanity checks, which it currently is not the case.

As you can read, the original plan was that the tests fail until #247 #272 are fixed. So until then you'll get always failing tests and would need to check if it's only that one, or maybe more. That's why I want to mark the test failing, so you just have to remember that these problems are unfixed as long as you get no error, but you are able to see one look if something broke. -> https://github.com/ingo-h/pupnp/pull/2
Unfortunately the tests are not that reliable atm -> https://github.com/Vollstrecker/pupnp/actions/runs/692231605
If they or OK on win is hard to guess, at it doesn't get this far, but deactivation is prepared.

but I would also like to run the code, so I ask you to leave the instructions in a comment in this file,

mkdir _deps
cd _deps
git clone https://github.com/google/googletest.git googletest-src
mkdir googletest-build
cmake ../googletest-src
make
cd ../..
mkdir libs

cp libgtestd.a libgmockd.a lib/

BUILD_DIR= compile.sh
You could adjust the output of googletest by setting their BINARY_DIR to the right place, or you could install it with DEST_DIR and change the path's in comile.sh according, if you (like me) don't like compile-artifacts in your source, you could adjust the whole script, but for now this is the way to go.

If you want to do your work, then you should first clarify what this is. You want to write tests, test that are needed to be compiled by hand, and this just to prrof you've found a problem. Are you going to fix it then, or should someone else do this and then delete the "tests", or adjust them to reflect the fix?

Sorry, I wasn't aware that the principles of test driven development are not known. So my in several comments written requirements may be confusing if not seeing this context. I will write a summary and job specification under Discussions so we can discuss it in context. But please give me some hours.

https://github.com/ingo-h/pupnp/pull/2 Fixes for failing tests are still execute failing tests and prevent pull request.

Sorry, I wasn't aware that the principles of test driven development are not known.

That's not true, and you know that. Automated tests are the heart of ttd, and fact that this automation is not wanted, is my problem. You can look at this here, everyone can see the tests are failing, marcello could if all succeed just merge without much handwork, even if he's short on time. That's the benefit. Noone wants to clone the repo (yours in that case) compile some tests by hand to see what happens and maybe copy output back here to discuss it.

Fixes for failing tests are still execute failing tests and prevent pull request.

Yep, but they work on one system and fail on another, so there's a problem within the test itself. I'm not sure why, but you can see that it's not the same everytime. Tests should be able to give the same result, at least on such related system like 16.04. and 18.04. of Ubuntu.

But to not just criticise, this matures to a good point. I've set just 2 to fail in the end (called_with_invalid_interface), as this was the way I got a successful run at my machine. If I was wrong with that, I think you should be able to transfer the scheme to others one. And noone cares about the win-fails, as this is not related to the tests or anything you've touched.
But the fails are showing someting:
On Debian Testing and Ubuntu 16.04 in Release-Build and 18.04 in Debug-Build this works. So the basic thing works.
On the remaining 4
UpnpApiIPv4TestSuite.initialize_default_UpnpInit2

UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_valid_interface fails 1x
UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_valid_interface-static fails 2x
UpnpApiIPv4TestSuite.initialize_default_UpnpInit2-static fails 2x
UpnpApiIPv4TestSuite.initialize_default_UpnpInit2 fails 1x

As this happens in different combinations, and sometimes the static link works while the dynamic one fails and vice versa, my guess would be some sort of race-condition. If this is within the test: Sorry, I can't help you there, but you still get some finetuning to do. But maybe this rc comes from the lib or the new interface, then I have to say: Nice catch.

Hi,
Let me add that there is a good chance that my last changes have introduced bug, as all new code does. So definitely testing is something important right now.
Ingo, if we have something mature now, I will try to understand your code and see why it is failing because you might be onto something important here. Just understand that I can't commit it unless the tests are working. If they are not working, maybe we need to fix the library at the same time.
Regards,
Marcelo.

    UpnpLib* p = UpnpLib_new();

    EXPECT_STREQ(UpnpGetErrorMessage(
                  UpnpGetIfInfo(p, "if0v4")),
                  "UPNP_E_SUCCESS");

This is not supposed to work. Let me explain why.
The only currently supported way to use libupnp is by calling UpnpInit2() as the first thing. As a consequence, the code inside UpnpInit2() is more constructor code than anything else. In spite of its deceptive name, UpnpLib_new() is automatically generated and does only basic member initialization, mostly setting stuff to zero or other exceptional value. Functional initialization is nonexistent and this is performed inside UpnpInit2().
Tthe first thing UpnpInit2() does is to call UpnpSetLogFileNames() to set up the log file. UpnpGetIfInfo(), as any other function inside the library can only be called after UpnpInit2() because it assumes all the constructor stuff has already happened. I might be possible to get away with not calling UpnpInit2(), but that requires analyzing both UpnpGetIfInfo() and
UpnpInit2() to make sure UpnpGetIfInfo() will not use some uninitialized resource.
Maybe this can explain other failures too.

Hi Ingo,
Another interesting thing:
15/22 Testing: test-upnp-UpnpApiIPv4TestSuite.initialize_default_UpnpInit2
15/22 Test: test-upnp-UpnpApiIPv4TestSuite.initialize_default_UpnpInit2
Command: "/home/mroberto/programs/pupnp/maint/github-creator/build/gtest/test-upnp-upnpapi" "--gtest_filter=UpnpApiIPv4TestSuite.initialize_default_UpnpInit2"
Directory: /home/mroberto/programs/pupnp/maint/github-creator/build/gtest
"test-upnp-UpnpApiIPv4TestSuite.initialize_default_UpnpInit2" start time: Mar 28 22:33 -03
Output:
----------------------------------------------------------
Note: Google Test filter = UpnpApiIPv4TestSuite.initialize_default_UpnpInit2
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from UpnpApiIPv4TestSuite
[ RUN      ] UpnpApiIPv4TestSuite.initialize_default_UpnpInit2
2021-03-28 22:33:46 UPNP-API_-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/api/upnpapi.cpp:260]: Inside UpnpInitPreamble
2021-03-28 22:33:46 UPNP-API_-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/api/upnpapi.cpp:277]: Trying a write lock
2021-03-28 22:33:46 UPNP-API_-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/api/upnpapi.cpp:277]: Write lock acquired
2021-03-28 22:33:46 UPNP-API_-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/api/upnpapi.cpp:279]: Trying Unlock
2021-03-28 22:33:46 UPNP-API_-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/api/upnpapi.cpp:279]: Unlocked rwlock
2021-03-28 22:33:46 UPNP-API_-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/api/upnpapi.cpp:417]: UpnpInit2 with IfName=NULL, DestPort=0.
2021-03-28 22:33:46 UPNP-API_-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/api/upnpapi.cpp:4073]: Interface name=if0v4, index=0, v4=<IP_ADDRESS>, v6=, ULA or GUA v6=
2021-03-28 22:33:46 UPNP-API_-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/api/upnpapi.cpp:333]: Entering UpnpInitStartServers
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:936]: get_miniserver_sockets: resuseaddr is set.
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:598]: sockfd = 6, .... port = 0
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:598]: sockfd = 7, .... port = 0
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:598]: sockfd = 8, .... port = 0
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:961]: get_miniserver_sockets: bind successful
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002ED1 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:598]: sockfd = 9, .... port = 0
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:264]: miniserver 0: READING
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002ED9 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:264]: miniserver 0: READING
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:457]: (http_RecvMessage): Error -207, http_error_code = 400.
2021-03-28 22:33:46 UPNP-MSER-2: Thread:0x0000000000002EDA [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/miniserver/miniserver.c:264]: miniserver 0: READING
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED9 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:457]: (http_RecvMessage): Error -207, http_error_code = 400.
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED9 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : HTTP/0.0 400
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002EDA [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:457]: (http_RecvMessage): Error -207, http_error_code = 400.
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002EDA [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : HTTP/0.0 400
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002EDA [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : Bad Request
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : HTTP/0.0 400
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : Bad Request
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : SERVER:
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : Linux/5.11.6-1-default, UPnP/1.0, Portable SDK for UPnP devices/1.16.0

2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : CONTENT-LENGTH:
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : Accept-Ranges: bytes
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : CONTENT-TYPE:
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : text/html
2021-03-28 22:33:46 UPNP-HTTP-3: Thread:0x0000000000002ED7 [/home/mroberto/programs/pupnp/maint/github-creator/upnp/src/genlib/net/http/httpreadwrite.c:1769]: Adding a string : <html><body><h1>400 Bad Request</h1></body></html>
...

That looks very promising! See HTTP/0.0? That might be something to look into. Unfortunately the ports are returning zero, that might leave parts of the library upset.
But the miniserver is responding and the network mocking infrastructure seems to be progressing, and that is really good news!
Unfortunately, I don't get the errors on the sanity checks, but you may try to fix things on the lines of my previous message.
Regards,
Marcelo.

In fact, your tests have already given this result #279 .

    UpnpLib* p = UpnpLib_new();

    EXPECT_STREQ(UpnpGetErrorMessage(
                  UpnpGetIfInfo(p, "if0v4")),
                  "UPNP_E_SUCCESS");

This is not supposed to work. Let me explain why.
UpnpGetIfInfo(), as any other function inside the library can only be called after UpnpInit2()

No. I have inspected the code and do the same initialization to UpnpGetIfInfo() that UpnpInit2() do. The upnp/gtest/test_upnpapi.cpp is running successful on this test. See below.

I might be possible to get away with not calling UpnpInit2(), but that requires analyzing both UpnpGetIfInfo() and UpnpInit2() to make sure UpnpGetIfInfo() will not use some uninitialized resource.

What should it be? At the beginning of making the test it fails of course. But then I found all side effects step by step and mocked them. There are no uninitialized resources anymore. The test is running now as shown:
gtest$ ./compile.sh test_upnpapi.cpp && ./test_upnpapi.a 2>/dev/null
[==========] Running 5 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 3 tests from UpnpApiIPv4TestSuite
[ RUN      ] UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_interface_if0v4
[       OK ] UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_interface_if0v4 (0 ms)
[ RUN      ] UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_unknown_interface
test_upnpapi.cpp:216: Failure
Expected equality of these values:
  *UpnpLib_get_gIF_NAME(p)
    Which is: { 'e' (101, 0x65), 't' (116, 0x74), 'h' (104, 0x68), 'O' (79, 0x4F) }
  *&""
    Which is: 0x55af56cbf1bc
ATTENTION! There is a wrong upper case 'O', not zero in "ethO"

[  FAILED  ] UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_unknown_interface (0 ms)
[ RUN      ] UpnpApiIPv4TestSuite.initialize_default_UpnpInit2
test_upnpapi.cpp:273: Failure
Value of: captFdObj.print(std::cerr)
  Actual: true
Expected: false
Output to stderr is true. There should not be any output to stderr.

[  FAILED  ] UpnpApiIPv4TestSuite.initialize_default_UpnpInit2 (62 ms)
[----------] 3 tests from UpnpApiIPv4TestSuite (66 ms total)

[----------] 2 tests from UpnpApiTestSuite
[ RUN      ] UpnpApiTestSuite.get_handle_info
[       OK ] UpnpApiTestSuite.get_handle_info (0 ms)
[ RUN      ] UpnpApiTestSuite.get_error_message
[       OK ] UpnpApiTestSuite.get_error_message (0 ms)
[----------] 2 tests from UpnpApiTestSuite (0 ms total)

[----------] Global test environment tear-down
[==========] 5 tests from 2 test suites ran. (70 ms total)
[  PASSED  ] 3 tests.
[  FAILED  ] 2 tests, listed below:
[  FAILED  ] UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_unknown_interface
[  FAILED  ] UpnpApiIPv4TestSuite.initialize_default_UpnpInit2

 2 FAILED TESTS

Test with interface name if0v4 is OK:
[ RUN      ] UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_interface_if0v4
[       OK ] UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_interface_if0v4 (0 ms)

This is issue https://github.com/pupnp/pupnp/issues/247 and FAILED:
ATTENTION! There is a wrong upper case 'O', not zero in "ethO"

[  FAILED  ] UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_unknown_interface (0 ms)

This is issue https://github.com/pupnp/pupnp/issues/272 and FAILED also:
Output to stderr is true. There should not be any output to stderr.

[  FAILED  ] UpnpApiIPv4TestSuite.initialize_default_UpnpInit2 (62 ms)

Hi Ingo,
Maybe I am being too naive, but I still don't understand how this code works, so please do explain it to me.
...
    UpnpLib* p = UpnpLib_new();

    EXPECT_STREQ(UpnpGetErrorMessage(
                  UpnpGetIfInfo(p, "if0v4")),
                  "UPNP_E_SUCCESS");
...

This is C++. There is no doubt that the first statement executes before whatever is the second statement, which is a macro, btw. So, yes, maybe these google test macros can invert the order of the execution of stuff. But that is not the case, because if I do:
...
    EXPECT_STREQ(UpnpGetErrorMessage(
                  UpnpGetIfInfo(p, "if0v4")),
                  "UPNP_E_SUCCESS");
    UpnpLib* p = UpnpLib_new();
...

I.e., if I invert the order of the statements, I get: test_upnpapi.cpp:211:33: error: use of undeclared identifier 'p'. What you are telling me is that between the execution of UpnpLib* p = UpnpLib_new(); and the macro EXPECT_STREQ there is some code that as you state "But then I found all side effects step by step and mocked them. There are no uninitialized resources anymore.".
Please explain me where (in what lines) you do initialize the contents of the struct pointed to by p.
If you don't (manually?) initialize this struct, I shall stand by my claim that what you get is a fully uninitialized struct that will likely segfault. Notice the use of likely in the previous sentence, because what really happens is undefined behavior, and undefined behavior sometimes runs smoothly.
Please forgive my lack of knowledge of the google test infra-structure, it is certainly in my TODO list to start using it as it already shows very interesting results.

Ok, Ingo, I follow you.
My question is: how does google test initializes the contents of the struct pointed to by p?
In the snip part of the code you posted, one example I can see is that there is no code initializing the log subsystem. And the whole library, UpnpGetIfInfo() included, depends upon this initialization.
From what I can see, what you are doing is allocating memory through UpnpLib_new() and calling UpnpGetIfInfo() without calling UnpnInit2(). Please confirm if that claim is correct. And in that case, do you expect UpnpGetIfInfo() to initialize *p because you mocked some functions? How can this be substitute for a call to UpnpInit2()?
The sequence you show me is this:

Mock some functions
Call p = UpnpLib_new()
Call UpnpGetIfInfo(p, "if0v4")

My claim is that no matter what functions you mock, UpnpGetIfInfo() will receive a fully non-initialized struct through the pointer p, because:

No code has any knowledge of *p before UpnpLib_new() has been called;
UpnpLib_new() does not initialize *p;
The code to initialize *p has not been called before you call UpnpGetIfInfo(p, "if0v4").

The mocking you show would help if UpnpInit2() was being called. My point is that it is not being called and there is no way you can initialize *p without passing the same *p to UpnpInit2().

Hi @mrjimenez,
to understand things better, first the complete TestSuite for UpnpGetIfInfo():
TEST_F(UpnpApiIPv4TestSuite, UpnpGetIfInfo_called_with_valid_interface)
{
    // provide a network interface
    struct ifaddrs* ifaddr = nullptr;
    CIfaddr4 ifaddr4Obj;
    ifaddr4Obj.set("if0v4", "<IP_ADDRESS>/11");
    ifaddr = ifaddr4Obj.get();

    // mock needed system functions
    EXPECT_CALL(mockGetifaddrsObj, getifaddrs(_))
        .WillOnce(DoAll(SetArgPointee<0>(ifaddr), Return(0)));
    EXPECT_CALL(mockFreeifaddrsObj, freeifaddrs(ifaddr))
        .Times(1);
    EXPECT_CALL(mockIf_nametoindexObj, if_nametoindex(_))
        .WillOnce(Return(2));

    UpnpLib* p = UpnpLib_new();

    EXPECT_STREQ(UpnpGetErrorMessage(
                  UpnpGetIfInfo(p, "if0v4")),
                  "UPNP_E_SUCCESS");

    // gIF_NAME mocked with getifaddrs above
    EXPECT_EQ(*UpnpLib_get_gIF_NAME(p), *&"if0v4");
    // gIF_IPV4 mocked with getifaddrs above
    EXPECT_EQ(*UpnpLib_get_gIF_IPV4(p), *&"<IP_ADDRESS>");
    EXPECT_EQ(*UpnpLib_get_gIF_IPV4_NETMASK(p), *&"<IP_ADDRESS>");
    EXPECT_EQ(*UpnpLib_get_gIF_IPV6(p), *&"");
    EXPECT_EQ(UpnpLib_get_gIF_IPV6_PREFIX_LENGTH(p), (unsigned)0);
    EXPECT_EQ(*UpnpLib_get_gIF_IPV6_ULA_GUA(p), *&"");
    EXPECT_EQ(UpnpLib_get_gIF_IPV6_ULA_GUA_PREFIX_LENGTH(p), (unsigned)0);
    // index mocked with if_nametoindex above
    EXPECT_EQ(UpnpLib_get_gIF_INDEX(p), (unsigned)2);
    EXPECT_EQ(UpnpLib_get_LOCAL_PORT_V4(p), (unsigned short)0);
    EXPECT_EQ(UpnpLib_get_LOCAL_PORT_V6(p), (unsigned short)0);
    EXPECT_EQ(UpnpLib_get_LOCAL_PORT_V6_ULA_GUA(p), (unsigned short)0);

    UpnpLib_delete(p);
}

It is difficult to direct answer your questions because they are asked from a wrong view. You are caught in the traditional view of code programming. Unit test is a tool to develop software. It is not only for testing. From scientific theory a piece of software (UpnpGetIfInfo()) is seen as an isolated unit. It is important to have in mind that it is a Unit under Test. That's not the real world. Now you define conditions that are needed or fail the unit. This way I have verified that UpnpGetIfInfo() will end with "UPNP_E_SUCCESS" with the conditions I have given. If you suspect that this are not the right conditions or not all, then the Unit is not working correct or it is incomplete. Correct the conditions or add the missing and make the Unit to finish again with "UPNP_E_SUCCESS". This will then also correctly work in the real world.
If you look at the TestSuite you will find that UpnpLib* p = UpnpLib_new(); is called and executed by the TestSuite before calling UpnpGetIfInfo(). I had a look at UpnpLib_new() and there is code executed that initialize a structure with defined values (NULL, 0, nullptr, etc. but no dangling pointer that result in Segmentation fault). I cannot say more than that this is enough to finish the function correctly (together with the mocked functions). Sorry, that is fact. If this should not be then it must be corrected.

one example I can see is that there is no code initializing the log subsystem. And the whole library, UpnpGetIfInfo() included, depends upon this initialization.

The whole library consists of different Units.UpnpGetIfInfo() finishes successful without it, nothing more is said.

From what I can see, what you are doing is allocating memory through UpnpLib_new() and calling UpnpGetIfInfo() without calling UnpnInit2(). Please confirm if that claim is correct.

Yes, that is correct.

And in that case, do you expect UpnpGetIfInfo() to initialize *p because you mocked some functions?

As verified by the TestSuite UpnpGetIfInfo() is the part that "initialized" *p, not UpnpInit2(). I expect that the function finishes successfully with p = UpnpLib_new() called before. But that was not enough. It also need correct values returned by getifaddrs(), freeifaddrs() and if_nametoindex(). Then googletest confirms my expectation.

How can this be substitute for a call to UpnpInit2()?

Very obviously UpnpInit2() does not need to do anything for UpnpGetIfInfo(). All what it needs is doing by itself, in particular calling getifaddrs(), freeifaddrs() and if_nametoindex(). That is also logical, because UpnpInit2() will get information from UpnpGetIfInfo().

The sequence you show me is this:
1. Mock some functions
2. Call p = UpnpLib_new()
3. Call UpnpGetIfInfo(p, "if0v4")

Yes.

My claim is that no matter what functions you mock, UpnpGetIfInfo() will receive a fully non-initialized struct through the pointer p, because:

No code has any knowledge of *p before UpnpLib_new() has been called;

Correct

UpnpLib_new() does not initialize *p;

I do not think so. There is code executed that initializes random memory to well defined values so it does not result in segmentation fault.

The code to initialize *p has not been called before you call UpnpGetIfInfo(p, "if0v4").

Except UpnpLib_new() there is no more code needed for additional modifying *p.

The mocking you show would help if UpnpInit2() was being called. My point is that it is not being called and there is no way you can initialize *p without passing the same *p to UpnpInit2().

Googletest shows us that it is not needed to call UpnpInit2() to successful finish UpnpGetIfInfo() as Unit under Test.

It is difficult to direct answer your questions because they are asked from a wrong view. You are caught in the traditional view of code programming. Unit test is a tool to develop software. It is not only for testing. From scientific theory a piece of software (UpnpGetIfInfo()) is seen as an isolated unit. It is important to have in mind that it is a Unit under Test. That's not the real world. Now you define conditions that are needed or fail the unit. This way I have verified that UpnpGetIfInfo() will end with "UPNP_E_SUCCESS" with the conditions I have given. If you suspect that this are not the right conditions or not all, then the Unit is not working correct or it is incomplete. Correct the conditions or add the missing and make the Unit to finish again with "UPNP_E_SUCCESS". This will then also correctly work in the real world.

Google tests and mocks run in the real world, and they are implemented through C++. We cannot escape that.

If you look at the TestSuite you will find that UpnpLib* p = UpnpLib_new(); is called and executed by the TestSuite before calling UpnpGetIfInfo(). I had a look at UpnpLib_new() and there is code executed that initialize a structure with defined values (NULL, 0, nullptr, etc. but no dangling pointer that result in Segmentation fault). I cannot say more than that this is enough to finish the function correctly (together with the mocked functions). Sorry, that is fact. If this should not be then it must be corrected.

As I showed you, this is not the case. I have shown you that all the log structures will not be initialized. In particular, I had this problem before, the code worked on linux but did not work on windows, because the pthread mutex implementations are different.

one example I can see is that there is no code initializing the log subsystem. And the whole library, UpnpGetIfInfo() included, depends upon this initialization.

The whole library consists of different Units.UpnpGetIfInfo() finishes successful without it, nothing more is said.

On one system this might be true, but not in all systems. As you seem to like theory, which is a good thing, don't get me wrong, consider this: one example does not confirm a thesis. One counter-example destroys a thesis. The fact that the program works under a certain circumstance does not guarantees its correctness. A million test suits will not do it. A single failing test is enough to show that it does not work.
Just look at the checks. You have failing tests in

Build / Build (ubuntu-16.04) - Debug
Build / Build (ubuntu-18.04) - Release
Build / Build (ubuntu-20.04) - Debug
Build / Build (ubuntu-20.04) - Release
Build / Build (windows-2016) - Debug
Build / Build (windows-2016) - Release
Build / Build (windows-2019) - Debug
Build / Build (windows-2019) - Release

From what I can see, what you are doing is allocating memory through UpnpLib_new() and calling UpnpGetIfInfo() without calling UnpnInit2(). Please confirm if that claim is correct.

Yes, that is correct.

And in that case, do you expect UpnpGetIfInfo() to initialize *p because you mocked some functions?

As verified by the TestSuite UpnpGetIfInfo() is the part that "initialized" *p, not UpnpInit2().

You just have to look at the code to see that your statement is false.

I expect that the function finishes successfully with p = UpnpLib_new() called before. But that was not enough. It also need correct values returned by getifaddrs(), freeifaddrs() and if_nametoindex(). Then googletest confirms my expectation.

Why are you ignoring UpnpPrintf()? In spite of me telling you that it will use data that is only initialized if UpnpInit2() is called. More precisely, UpnpSetLogFileName() must be called before any log function be used. If you don't do that, you get undefined behavior. And that means that the code may work sometimes and may fail other times.

How can this be substitute for a call to UpnpInit2()?

Very obviously UpnpInit2() does not need to do anything for UpnpGetIfInfo(). All what it needs is doing by itself, in particular calling getifaddrs(), freeifaddrs() and if_nametoindex(). That is also logical, because UpnpInit2() will get information from UpnpGetIfInfo().

Please, follow this: UpnpGetIfInfo() calls UpnpPrintf(). Do you disagree? What part of the code initializes these variables:
struct s_UpnpLib
{
...
        ithread_mutex_t m_gLogMutex;
        Upnp_LogLevel m_gLogLevel;
        FILE *m_gLogFp;
        int m_gLogIsStderr;
        int m_gSetLogWasCalled;
        int m_gLogInitWasCalled;
        char *m_gLogFileName;
};

The sequence you show me is this:

Mock some functions
Call p = UpnpLib_new()
Call UpnpGetIfInfo(p, "if0v4")

Yes.

My claim is that no matter what functions you mock, UpnpGetIfInfo() will receive a fully non-initialized struct through the pointer p, because:

No code has any knowledge of *p before UpnpLib_new() has been called;

Correct

UpnpLib_new() does not initialize *p;

I do not think so. There is code executed that initializes random memory to well defined values so it does not result in segmentation fault.

It is not a matter o thinking. I wrote that code. It just sets stuff to zero. And this is deliberated so that if you don't call the initializer functions there is a huge chance that the program will segfault soon. But even that is not guaranteed.

The code to initialize *p has not been called before you call UpnpGetIfInfo(p, "if0v4").

Except UpnpLib_new() there is no more code needed for additional modifying *p.

Sorry, this is false. I know because I wrote it. Just read the code.

The mocking you show would help if UpnpInit2() was being called. My point is that it is not being called and there is no way you can initialize *p without passing the same *p to UpnpInit2().

Googletest shows us that it is not needed to call UpnpInit2() to successful finish UpnpGetIfInfo() as Unit under Test.

If that is so, then Googletest is wrong.
And as I said before, working once does not prove anything. Failing once does.
I do not wish to proceed in this discussion about variable initialization, since it is leading us nowhere. I just wanted to ask you one more question: from the results of the tests, what is your conclusion?

I just wanted to ask you one more question: from the results of the tests, what is your conclusion?

From the results of the tests there is ongoing software development, either by improving the software or to decide that the test meets all known conditions so far. You are requested to improve the test if you meet a condition you have overseen, even after years.

If that is so, then Googletest is wrong.

There is no point in ignoring 20 years of academic work and practical experience with tons of dissertations and teaching at all relevant universities and schools.

Sweet, he wanted to test the clutch without a motor and because you don't understand that motor is broken if the clutch can't be rotated with a toy-motor that maybe work or not, he is offended like a five year old and dumbs all his other toys, too.
For me it seems like he is an academic straight from the university that now want's to change the world. Strictly like he learned it there, the real world has to be adjusted to the academic one.
Anyways, the basis for using gtest is done, and @AlaricSenat will maybe benefit from that.

Well, I think it is most unfortunate that Ingo closed this issue, I still hoped that the would prove me wrong. Then I would really have learned something new.

I just wanted to ask you one more question: from the results of the tests, what is your conclusion?

From the results of the tests there is ongoing software development, either by improving the software or to decide that the test meets all known conditions so far. You are requested to improve the test if you meet a condition you have overseen, even after years.

I meant objectively, not generically. What did you find out? What has to be changed? Where is the problem? UpnpLib_new() or UpnpGetIfInfo()?

If that is so, then Googletest is wrong.

There is no point in ignoring 20 years of academic work and practical experience with tons of dissertations and teaching at all relevant universities and schools.

I am not ignoring anything. Notice that my sentence begins with an If and concludes with a then. I also took a lot of time to understand your code and what google test is doing, which is the opposite of ignoring. On the other hand, you are ignoring the supreme evidence: code. It is written. It is an indisputable fact. No one can deny what is written. You can only argue about what is really happening and how the compiler interprets it. That is usually the issue with C++.
I hope you can still contribute with the project. I have nothing against good theory and good programming practices.

Hi Marcelo,

I am not ignoring anything. [...] I hope you can still contribute with the project. I have nothing against good theory and good programming practices.

I*m glad to read this :-) I have started to contribute with the project to get stable IPv6 support, and yes - maybe a little immodest - to help to boost it up with modern software development methods. In some private projects I have had experience with unit tests with very good results. With your comment:

I do not wish to proceed in this discussion about variable initialization, since it is leading us nowhere.

I haven't seen how to go on with my suggestion. This is one basis of unit tests to get its paradigm of isolation (sorry for theory). It is needed to get always reproducible tests independent of the system it is running on. One of my goals would be to have MS Windows tests running together with Linux tests on Linux just by mocking its system function calls like we do it with the Linux system calls.
Unit Tests are mainly used for two things:

Refactoring of old software projects. Here the productive code isn't touched and tests are created that match the given behavior as much as possible. This is where the experience of the original developer is very valuable because he knows the best what his software needs. As you mentioned: "The fact that the program works under a certain circumstance does not guarantees its correctness." That is the reason why unit tests are never finished. If you find a bug or a shortcoming, then you are required to adapt the test. So the tests will become more and more complete over the time. If we have sufficient unit tests, which cover most of the production code, we can optimize the program with the certainty that it will behave unchanged (refactoring).
Develop a program. This starts first with a Test and coding is done against this test. There are many reasons given in the literature why this leads to better code. Practical tests have shown that the code is more compact and more stable then (Benefits).

What I'm talking about and have started is Point 1. Here are some more detailed answers to your questions.

I have shown you that all the log structures will not be initialized.

But UpnpGetIfInfo() does not fail without it. The consequence can not be, to say the test is meaningless. Instead the function should be made to fail without initialized log and the test adopted to it.

Just look at the checks. You have failing tests in
Build / Build (ubuntu-16.04) - Debug
Build / Build (ubuntu-18.04) - Release
--- snip ---

Yes, that is a lack and it shows that the simple tests are not really isolated running. But we have just started with it and it is the wrong focus to insist on the sanity checks at this time. We should make them clean and stable and then decide to add them step by step to the sanity checks.

As verified by the TestSuite UpnpGetIfInfo() is the part that "initialized" *p, not UpnpInit2().

You just have to look at the code to see that your statement is false.

OK, to be more clear: it is enough to call UpnpLib_new() to get a valid pointer and run UpnpGetIfInfo() with it. After it has successfully finished the following is returned:
"if0v4"        by *UpnpLib_get_gIF_NAME(p)
"<IP_ADDRESS>" by *UpnpLib_get_gIF_IPV4(p)
"<IP_ADDRESS>"  by *UpnpLib_get_gIF_IPV4_NETMASK(p)
""             by *UpnpLib_get_gIF_IPV6(p)
and some more.

If this should not be (but looks good so far) then UpnpGetIfInfo() is working wrong, not the test. B.t.w. it's simple to just try it to look what happens and I myself was amazed that it works.

Why are you ignoring UpnpPrintf()?

Because I didn't know that it is needed. I haven't inspected the code in all details to understand completely how it works. I executed UpnpGetIfInfo() as unit. But thanks for the info. I will have a look at UpnpPrintf() and make a test for it if not static.

It just sets stuff to zero. And this is deliberated so that if you don't call the initializer functions there is a huge chance that the program will segfault soon.

Just to understand the intention of unit tests: with the conditions I have given it is guaranteed not to segfault. Of course the conditions may be false or incomplete and I have to find the correct ones that are more to the reality.
If you like you can reopen this issue. I would also recover the branch. Maybe it is an option just to play a bit with googletest?

Hi Ingo,
As I stated far at the top, if the testing code you add does not make the sanity checks fail, I have nothing against it and in fact I would have already committed your code.
So lets separate the things. We have Github actions and they are used to prevent regressions. We can use google tests for regression prevention, refactoring and program development. Those activities must be separate. That is all I ask.
If things stay separate, I see the refactoring and program testing department as a factory of regression prevention tests. I.e., tests will migrate from refactoring to Github actions as they start to succeed.

Hello Marcelo,
I will try to skip the failing tests so we have time to investigate why. I was searching for sanity checks on github help but couldn't find useful information. Do you know where to look how it works on pupnp?
I have already merged the master to the gtests01 branch, not rebased. Does it matter?

I will try to skip the failing tests so we have time to investigate why. I was searching for sanity checks on github help but couldn't find useful information. Do you know where to look how it works on pupnp?

Take a look here: Github Actions.
The file that configures it in pupnp is .github/workflows/ccpp.yml.

I have already merged the master to the gtests01 branch, not rebased. Does it matter?

Hopefully not, but anyway would not be a big problem, maybe Github can't handle the merge automatically, but we can do it by hand.

Hi folks,
Nice work!
...
33/34 Test #33: test-upnp-HttpHeaderList.TwoElements-static .........................................   Passed    0.00 sec
      Start 34: test-upnp-HttpHeaderList.PlentyElements-static
34/34 Test #34: test-upnp-HttpHeaderList.PlentyElements-static ......................................   Passed    0.00 sec

100% tests passed, 0 tests failed out of 28

Total Test time (real) =   0.49 sec

The following tests did not run:
         15 - test-upnp-UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_valid_interface (Disabled)
         16 - test-upnp-UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_unknown_interface (Disabled)
         17 - test-upnp-UpnpApiIPv4TestSuite.initialize_default_UpnpInit2 (Disabled)
         20 - test-upnp-UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_valid_interface-static (Disabled)
         21 - test-upnp-UpnpApiIPv4TestSuite.UpnpGetIfInfo_called_with_unknown_interface-static (Disabled)
         22 - test-upnp-UpnpApiIPv4TestSuite.initialize_default_UpnpInit2-static (Disabled)

Now that we have gtest running and it certainly runs on the sanity tests, what about adding a CMake option to enable them to run? That way we could run them on the desktop, but not on Github actions.
Would you have anything against adding such an option? If not, please do.
Regards,
Marcelo.

you can run them from cmd-line. test_upnpapi and test_upnpapi-static are created ans contain all tests. They should have some help param that tells you how you run disabled, or just specific ones.
An explicit option for that would be possible, but then we would either have to modify the source on configure, or splt them out into a separate-file to compile them only with the option. The first option would be ugly, the second one would mean we could easily identify failing ones, in that caser we could just mark them as failing and let them run with the others (I would prefer that one).

I agree that we don't need an option for each test, this we can do by executing them individually as you stated.
The second option you highlighted is more in line with what I had in mind. Running all of the tests together and making it easier to identify the failing ones.

It's already prepared (you asked somewhere what I mean with WILL_FAIL: exactly this). Someone just has to take the task to split the file and move the stuff that both need into a header.

I'm just working on this with the goal that all gtests will also run on all sanity checks so we can enable them step by step. We should not screw at two ends. Please give me some time for a suggestion. Simple gtests only using googletest are running, like the test_template.cpp and test_UpnpHttpHeaderList.cpp. There is only an issue with googlemock.
To run them on the desktop please have a look at gtest/README.


Country city missing

Hello,

The city "Odense" in Denmark is not supported. Please support it.

and it would be nice to add city names. Beside that..really well done! really wonderful work :+1:
is there any plans on porting it to android ?  that would be so good to have on both platform.

I agree ! any update soon regarding this issue???

Will be fixed in next release.


Geographic Lookup of Lat/Lon

Find the city and state of the image based on the GPS coordinates. This will be used to help organize the files on disk.

The ImageMeta class now has an address property that uses the Google Geocoding API to look up an address string. No city and state (or other region) are parsed but the full string is there.

created a geocode console utility that geocodes the database while respecting the rate limit and usage limit of the geocode API. This will have to be done in routine chunks rather than regularly.


[Languages]How to produce speech or audio from a written series of words in python

Proposed title of the article
How to generate speech or audio from a written series of words in python
Proposed article introduction
When one have a written text and they are supposed to read it all along so that they can get the reqiured directives, sometimes it becomes too tiresome to accomplish this task, therefore to cater for this problem a solution of generating a corresponding audio file that will make this process easier.
In this article, we shall pit our focus on how one can come up with an audio file that is in correspondence with the its text file. We shall therefore use modules or packages that will make this idea complete and functioning which is the gtts api which will guide us in this article but in the future implementing an Artificial Intelligence module will be more appropriate.
Key takeaways

Installation of the gtts api in the machine
Implementation of the gtts api using python code
Displaying the output and implementing the offline api

Article quality
The quality of this article will best add more content as compared to other articles that may exist in such a way that we shall implement our objectives one after the other using proper description.
References
N/A

What is the extra content you claim you will add, @amosnjoro that differs from existing articles on this topic?

@amosnjoro
Closing due to inactivity - if you'd like to continue working on the topic. Please let us know.


Join field 'create new' causing 303's and mass redirects resulting in multiple drafts being generated

Describe the Bug
Clicking the Create new on a join field table button causes drawer to open as expected with the loading overlay, however it also causes multiple POST requests to the collection and the creation of (in my testing) 3 drafts unintentionally.
See the issue in action:
https://github.com/user-attachments/assets/f3f6845f-bad0-4dc4-ae26-7edb8dd31a7b
Link to the code that reproduces this issue
https://github.com/akhrarovsaid/payload-beta.132-join-drafts-issue-on-create-new
Reproduction Steps

Create a new website template with Postgres adapter
Create the first user as usual
Seed the database
Add the following field to Categories:

{
    type: 'join',
    on: 'categories',
    collection: 'posts',
    name: 'relatedPosts'
  }

pnpm dev
Navigate to categories
Select a category
Click create new on join table
Observe unexpected behavior and server stdout.

Which area(s) are affected? (Select all that apply)
db-postgres, area: templates, area: core
Environment Info
Binaries:
  Node: 20.10.0
  npm: N/A
  Yarn: N/A
  pnpm: 9.11.0
Relevant Packages:
  payload: 3.0.0-beta.132
  next: 15.0.0
  @payloadcms/live-preview: 3.0.0-beta.132
  @payloadcms/richtext-lexical: 3.0.0-beta.132
  @payloadcms/translations: 3.0.0-beta.132
  react: 19.0.0-rc-65a56d0e-20241020
  react-dom: 19.0.0-rc-65a56d0e-20241020
Operating System:
  Platform: win32
  Arch: x64
  Version: Windows 10 Home
  Available memory (MB): 16268
  Available CPU cores: 4

Not sure why the GitHub action commented there (@denolfe might want to check on that). Thanks for providing a repro!
We're on it!

Excellent, thank you!
As for the GH action... that one's on me - I technically created the issue without pasting my repro link in it originally. Came back and added my repro.

Yep, he had a ninja edit on the repro link after initial creation :)

confirming that I'm also experiencing this behavior for collections with drafts/versions enabled


Responsive Design - Ready to Merge

Live Preview Link:
In this project:
We created a responsive copy of thenextweb site.
We used 2 breakpoints.
With the mobile-first approach.
We double-checked responsiveness down to 338px.
With all our respects...

Hello Ikraam Ghoor & Kubilay Çağlayan, I'm Sarah, your reviewer for this PR 👩🚀
This is an almost perfect first review submission! 👏 🎇
Great job at: 🥇

making the site perfectly responsive
making a great readme file
using semantic HTML
using sanitize.css
adding the gif on hover for the logo on small and medium screens
working great with gradients
adding google fonts

You still need to fix some minor issues before you can move to the next project

Required changes 🛠

[ ] The Latest News images should be aligned in big to medium screens. Please fix the different height issues you have:

Optional Enhancements

[ ] [OPTIONAL] You are repeating the media queries (min-width: 1024px) and (min-width: 800px) multiple times across your CSS styles. Make your code DRYer by calling the media query for each size just once and having all the needed style changes inside it.

[ ] [OPTIONAL] The border for your navbar search and hamburger icons has some border and margin issues. Compare yours and the original and try to make it closer:

Please fix the required change 👷  before asking for a new code review

Cheers and Happy coding!👏👏👏
Code review by Sarah Uryelah Silva Chamorro
(Feel free to contact me on slack by the handle of  sarah if you have any additional question)

Click For Live Website

The Latest News images should be aligned DONE
[OPTIONAL] You are repeating the media queries DONE
[OPTIONAL] The border for your navbar search and hamburger icons  DONE

With all of our respect...

Good job with the fixes guys!
Your project is approved! 🎊 🥅 💛

You may close this Pull Request and merge the changes 🏃

Keep being awesome devs and good luck with your next project!
Cheers and Happy coding!👏👏👏
Code review by Sarah Uryelah Silva Chamorro
(Feel free to contact me on slack by the handle of  sarah if you have any additional question)


User is not set when logged in programatically

Currently the user data is set via https://github.com/getsentry/sentry-symfony/blob/bcdbd3d13376473a514c0ec97566b0c7cdc5a1fc/src/EventListener/RequestListener.php#L66-L75
However, this means that programmatic logins do not add the user data to the event. Instead, an authentication listener should be used so that anywhere a user is logged in, the data is added to the span.

Hey @nesl247 !
Thanks for writing in!
Our own PHP wizard @cleptric  is currently out of office, so he will have a look at this when he returns next week.

Looks like a change from TokenStorage to Security could help to get the user in more cases.
However, Symfony\Component\Security\Core\Security is deprecated in favor of Symfony\Bundle\SecurityBundle\Security, so the bundle would be another dependency for the project.
Not sure though, if the TokenStorage is meant to stay and a change is required anyway

@xosofox I'm not sure how that would assist? The listener is only on request, not on authentication success, which is the entire point of this issue.
@antonpirker any update?

We’ll look at this at a later date, but it’s in our backlog.

Just to let you know so that we avoid double work, I’m working to see what we can do to solve this issue. I hope to open a PR soon with the changes 🔜

@nesl247 we're really close to merge the PR that should fix the problem. It would be cool if you could try the branch and let me know if everything works properly 😃

@nesl247 we're really close to merge the PR that should fix the problem. It would be cool if you could try the branch and let me know if everything works properly 😃

Unfortunately the code base we were running into this issue on became a PoC we put aside. We'll eventually run into this problem again in our current code base, but it'll be a little bit before I get there, so I don't really have a way to test it out in a production or even a pre-production environment.

Don’t worry, thanks anyway!


Determination tweaks

filters out outcome choices that are not possible with the available transitions
treats invited_to_proposal as an accepted determination response

Ben D reviewed it.